From: Mathieu Desnoyers Date: Wed, 13 Jun 2012 08:46:44 +0000 (-0400) Subject: Fix: perform TLS fixup of nest count outside of UST mutex X-Git-Tag: v2.1.0-rc1~59 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=a903623f391894ed136effbed7ae744fe9d66820;p=lttng-ust.git 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 --- 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