From: Mathieu Desnoyers Date: Fri, 4 Mar 2011 17:31:32 +0000 (-0500) Subject: Use liburcu-bp before/after fork (parent/child) callbacks X-Git-Tag: v1.9.1~425 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=1d7304a3f27fd639b513415c27b759e133e3d484;p=lttng-ust.git Use liburcu-bp before/after fork (parent/child) callbacks Handle fork() gracefully with urcu-bp. Dependency on urcu-bp 0.5.4. Signed-off-by: Mathieu Desnoyers --- diff --git a/libust/tracectl.c b/libust/tracectl.c index 0cff6fda..830e777b 100644 --- a/libust/tracectl.c +++ b/libust/tracectl.c @@ -1697,6 +1697,7 @@ void ust_before_fork(ust_fork_info_t *fork_info) * Hold listen_sock_mutex to protect from listen_sock teardown. */ pthread_mutex_lock(&listen_sock_mutex); + rcu_bp_before_fork(); } /* Don't call this function directly in a traced program */ @@ -1717,24 +1718,20 @@ static void ust_after_fork_common(ust_fork_info_t *fork_info) void ust_after_fork_parent(ust_fork_info_t *fork_info) { + rcu_bp_after_fork_parent(); /* Release mutexes and reenable signals */ ust_after_fork_common(fork_info); } void ust_after_fork_child(ust_fork_info_t *fork_info) { - /* First sanitize the child */ + /* Release urcu mutexes */ + rcu_bp_after_fork_child(); + + /* Sanitize the child */ ust_fork(); /* Then release mutexes and reenable signals */ ust_after_fork_common(fork_info); - - /* - * Make sure we clean up the urcu-bp thread list in the child by running - * the garbage collection before any pthread_create can be called. - * Failure to do so could lead to a deadlock caused by reuse of a thread - * ID before urcu-bp garbage collection is performed. - */ - synchronize_rcu(); }