From e38c8fc1be27964f9a87afca4db5ae164fe09371 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 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 -- 2.34.1