Use initial-exec TLS model
[lttng-ust.git] / liblttng-ust-libc-wrapper / lttng-ust-pthread.c
index fd3af1105a961422e276671a483b18c81a80389a..6554a47afe7057f3b8c2c21147574c2f77d5ad09 100644 (file)
  */
 
 #define _GNU_SOURCE
+/*
+ * Do _not_ define _LGPL_SOURCE because we don't want to create a
+ * circular dependency loop between this malloc wrapper, liburcu and
+ * libc.
+ */
 #include <lttng/ust-dlfcn.h>
+#include <urcu/tls-compat.h>
+#include <helper.h>
 #include <pthread.h>
 
 #define TRACEPOINT_DEFINE
@@ -25,7 +32,7 @@
 #define TP_IP_PARAM ip
 #include "ust_pthread.h"
 
-static __thread int thread_in_trace;
+static DEFINE_URCU_TLS_IE(int, thread_in_trace);
 
 int pthread_mutex_lock(pthread_mutex_t *mutex)
 {
@@ -48,10 +55,10 @@ int pthread_mutex_lock(pthread_mutex_t *mutex)
 
        thread_in_trace = 1;
        tracepoint(lttng_ust_pthread, pthread_mutex_lock_req, mutex,
-               __builtin_return_address(0));
+               LTTNG_UST_CALLER_IP());
        retval = mutex_lock(mutex);
        tracepoint(lttng_ust_pthread, pthread_mutex_lock_acq, mutex,
-               retval, __builtin_return_address(0));
+               retval, LTTNG_UST_CALLER_IP());
        thread_in_trace = 0;
        return retval;
 }
@@ -78,7 +85,7 @@ int pthread_mutex_trylock(pthread_mutex_t *mutex)
        thread_in_trace = 1;
        retval = mutex_trylock(mutex);
        tracepoint(lttng_ust_pthread, pthread_mutex_trylock, mutex,
-               retval, __builtin_return_address(0));
+               retval, LTTNG_UST_CALLER_IP());
        thread_in_trace = 0;
        return retval;
 }
@@ -105,7 +112,7 @@ int pthread_mutex_unlock(pthread_mutex_t *mutex)
        thread_in_trace = 1;
        retval = mutex_unlock(mutex);
        tracepoint(lttng_ust_pthread, pthread_mutex_unlock, mutex,
-               retval, __builtin_return_address(0));
+               retval, LTTNG_UST_CALLER_IP());
        thread_in_trace = 0;
        return retval;
 }
This page took 0.02383 seconds and 4 git commands to generate.