Provide pthread_atfork-friendly interfaces
[urcu.git] / urcu-call-rcu.c
index bb56dbb891fa0a270e7058bd18a47bfe4d554cbf..9cc56c54fafc39dfabef67c984663e3ba0d0155e 100644 (file)
@@ -565,14 +565,38 @@ void free_all_cpu_call_rcu_data(void)
        }
 }
 
+/*
+ * Acquire the call_rcu_mutex in order to ensure that the child sees
+ * all of the call_rcu() data structures in a consistent state.
+ * Suitable for pthread_atfork() and friends.
+ */
+void call_rcu_before_fork(void)
+{
+       call_rcu_lock(&call_rcu_mutex);
+}
+
+/*
+ * Clean up call_rcu data structures in the parent of a successful fork()
+ * that is not followed by exec() in the child.  Suitable for
+ * pthread_atfork() and friends.
+ */
+void call_rcu_after_fork_parent(void)
+{
+       call_rcu_unlock(&call_rcu_mutex);
+}
+
 /*
  * Clean up call_rcu data structures in the child of a successful fork()
- * that is not followed by exec().
+ * that is not followed by exec().  Suitable for pthread_atfork() and
+ * friends.
  */
 void call_rcu_after_fork_child(void)
 {
        struct call_rcu_data *crdp;
 
+       /* Release the mutex. */
+       call_rcu_unlock(&call_rcu_mutex);
+
        /*
         * Allocate a new default call_rcu_data structure in order
         * to get a working call_rcu thread to go with it.
This page took 0.024698 seconds and 4 git commands to generate.