From a903623f391894ed136effbed7ae744fe9d66820 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 13 Jun 2012 04:46:44 -0400 Subject: [PATCH] Fix: perform TLS fixup of nest count outside of UST mutex Could otherwise lead to a deadlock between the dynamic linker, TLS fixup, and the UST mutex due to reversed lock acquisition order. Signed-off-by: Mathieu Desnoyers --- liblttng-ust/lttng-ust-comm.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index 7a909701..4104a3f5 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -136,6 +136,15 @@ extern void ltt_ring_buffer_client_overwrite_exit(void); extern void ltt_ring_buffer_client_discard_exit(void); extern void ltt_ring_buffer_metadata_client_exit(void); +/* + * Force a read (imply TLS fixup for dlopen) of TLS variables. + */ +static +void lttng_fixup_nest_count_tls(void) +{ + asm volatile ("" : : "m" (lttng_ust_nest_count)); +} + static int setup_local_apps(void) { @@ -872,6 +881,7 @@ void __attribute__((constructor)) lttng_ust_init(void) lttng_fixup_event_tls(); lttng_fixup_ringbuffer_tls(); lttng_fixup_vtid_tls(); + lttng_fixup_nest_count_tls(); /* * We want precise control over the order in which we construct -- 2.34.1