Fix call_rcu fork handling
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 19 Dec 2012 00:31:21 +0000 (19:31 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 9 Jan 2013 18:09:08 +0000 (13:09 -0500)
commit483c853e4227f9d0b3ad03f7a4bd8038fe26da89
tree5bf0b9352066d2299fd26ea4b80628ee8de41bd6
parent25988c861ea9979de90ac7375808bb82bf0480cf
Fix call_rcu fork handling

Fix call_rcu fork handling by putting all call_rcu threads in a
quiescent state before fork (paused state), and unpausing them when the
parent returns from fork.

On the child, everything will run fine as long as we don't issue fork()
from a call_rcu callback.

Side-note: pthread_atfork is not appropriate when using with multithread
and malloc/free. The glibc malloc implementation sadly expects that all
malloc/free are executed from the context of a single thread while
pthread atfork handlers are running, which leads to interesting hang in
glibc.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
urcu-call-rcu-impl.h
urcu-call-rcu.h
This page took 0.024295 seconds and 4 git commands to generate.