X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=README;h=f7f0dece2249bb764af9932a35cbf1ca57abffa3;hb=b57aee663af988b7f686c076ce6aef2a0d2487c8;hp=10406f79f9b33b797e794ca463d97a5c7cf0378f;hpb=ac6454bc2a7d1acc6fbda969929b89b148f03a11;p=urcu.git diff --git a/README b/README index 10406f7..f7f0dec 100644 --- a/README +++ b/README @@ -190,3 +190,17 @@ SMP support ./configure --disable-smp-support theoretically yielding slightly better performance. + +Interaction with fork() + + Special care must be taken for applications performing fork() without + any following exec(). This is caused by the fact that Linux only clones + the thread calling fork(), and thus never replicates any of the other + parent thread into the child process. Most liburcu implementations + require that all registrations (as reader, defer_rcu and call_rcu + threads) should be released before a fork() is performed, except for the + rather common scenario where fork() is immediately followed by exec() in + the child process. The only implementation not subject to that rule is + liburcu-bp, which is designed to handle fork() by calling + rcu_bp_before_fork, rcu_bp_after_fork_parent and + rcu_bp_after_fork_child.