Fix: lttng perf counter deadlock
Using the ust_lock() to lazily setup the perf counters introduces
a scenario where this lock is nested within the urcu-bp read-side
lock.
However, the LTTNG_UST_WAIT_QUIESCENT ust command requires that
urcu-bp synchronize_rcu() is performed with the ust_lock() held.
This inter-dependency introduces a deadlock:
Thread A Thread B
rcu_read_lock()
ust_lock()
synchronize_rcu() (blocked by rcu
read-side lock)
ust_lock() <-- deadlock
Introduce a new lttng_perf_lock to protect the lttng perf context
data structures from concurrent modifications and from fork. This
lock can be nested within the ust_lock, but never the opposite.
This removes the circular locking dependency involving urcu bp.
Fixes: #1202
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
This page took 0.025817 seconds and 4 git commands to generate.