X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=src%2Furcu-bp.c;h=1f9a03818228e0c72941de77baf7f3bf720cd0d9;hb=0c8eff157de6f7ab836ec87a340a517d49fdaca3;hp=05efd97eb67a2c05c99a09dfb5c6e29e888ff81e;hpb=5b46e39d0e4d2592853c7bfc11add02b1101c04b;p=userspace-rcu.git diff --git a/src/urcu-bp.c b/src/urcu-bp.c index 05efd97..1f9a038 100644 --- a/src/urcu-bp.c +++ b/src/urcu-bp.c @@ -37,6 +37,7 @@ #include #include +#include #include #include #include @@ -74,8 +75,10 @@ void *mremap_wrapper(void *old_address, size_t old_size, * This is not generic. */ static -void *mremap_wrapper(void *old_address, size_t old_size, - size_t new_size, int flags) +void *mremap_wrapper(void *old_address __attribute__((unused)), + size_t old_size __attribute__((unused)), + size_t new_size __attribute__((unused)), + int flags) { assert(!(flags & MREMAP_MAYMOVE)); @@ -117,7 +120,10 @@ enum membarrier_cmd { static void __attribute__((constructor)) _urcu_bp_init(void); static -void __attribute__((destructor)) urcu_bp_exit(void); +void urcu_bp_exit(void); +static +void __attribute__((destructor)) urcu_bp_exit_destructor(void); +static void urcu_call_rcu_exit(void); #ifndef CONFIG_RCU_FORCE_SYS_MEMBARRIER int urcu_bp_has_sys_membarrier; @@ -677,6 +683,13 @@ void urcu_bp_exit(void) mutex_unlock(&init_lock); } +static +void urcu_bp_exit_destructor(void) +{ + urcu_call_rcu_exit(); + urcu_bp_exit(); +} + /* * Holding the rcu_gp_lock and rcu_registry_lock across fork will make * sure we fork() don't race with a concurrent thread executing with