X-Git-Url: https://git.lttng.org/?p=urcu.git;a=blobdiff_plain;f=src%2Furcu-bp.c;fp=src%2Furcu-bp.c;h=47fad8e870ee5f1bffb3b829cb2f3c3bd6abd264;hp=f886ec40763120847d54aef7a5d61a7a18b807d8;hb=d8befef26777884ffa55bb6c1a51f90971e12579;hpb=a51018daec6f563f9e74d37747c09d4f10ed7958 diff --git a/src/urcu-bp.c b/src/urcu-bp.c index f886ec4..47fad8e 100644 --- a/src/urcu-bp.c +++ b/src/urcu-bp.c @@ -120,7 +120,9 @@ 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 @@ -656,8 +658,6 @@ void _urcu_bp_init(void) static void urcu_bp_exit(void) { - urcu_call_rcu_exit(); - mutex_lock(&init_lock); if (!--urcu_bp_refcount) { struct registry_chunk *chunk, *tmp; @@ -676,6 +676,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