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.0.4~1 X-Git-Url: http://git.lttng.org/?p=lttng-ust.git;a=commitdiff_plain;h=e38c8fc1be27964f9a87afca4db5ae164fe09371;hp=3b8b68e73ec9b2b3cf550048046d3f7f69050688 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 8c864f8c..2c787f75 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) { @@ -860,6 +869,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