Initialize liblttng-ust-common in dependent libraries
[lttng-ust.git] / src / lib / lttng-ust / lttng-ust-comm.c
index 15cb555028d979ff656ddbcf9e3c66e98f190c10..2f96167e419601bf48e75c3ccc87f4b65a606ffa 100644 (file)
@@ -25,7 +25,6 @@
 #include <signal.h>
 #include <limits.h>
 #include <urcu/uatomic.h>
-#include "futex.h"
 #include <urcu/compiler.h>
 #include <lttng/urcu/urcu-ust.h>
 
 #include <lttng/ust-libc-wrapper.h>
 #include <lttng/ust-thread.h>
 #include <lttng/ust-tracer.h>
+#include <lttng/ust-common.h>
 #include <urcu/tls-compat.h>
+#include "common/compat/futex.h"
 #include "common/ustcomm.h"
 #include "common/ust-fd.h"
 #include "common/logging.h"
 #include "common/macros.h"
-#include "tracepoint-internal.h"
+#include "common/tracepoint.h"
 #include "lttng-tracer-core.h"
 #include "common/compat/pthread.h"
 #include "common/procname.h"
 #include "common/ringbuffer/rb-init.h"
 #include "lttng-ust-statedump.h"
 #include "clock.h"
-#include "common/ringbuffer/getcpu.h"
-#include "getenv.h"
-#include "ust-events-internal.h"
+#include "lib/lttng-ust/getcpu.h"
+#include "common/getenv.h"
+#include "lib/lttng-ust/events.h"
 #include "context-internal.h"
 #include "common/align.h"
 #include "lttng-counter-client.h"
@@ -1727,7 +1728,7 @@ void wait_for_sessiond(struct sock_info *sock_info)
 "Please upgrade your kernel "
 "(fix is commit 9ea71503a8ed9184d2d0b8ccc4d269d05f7940ae in Linux kernel "
 "mainline). LTTng-UST will use polling mode fallback.");
-                       if (ust_err_debug_enabled())
+                       if (lttng_ust_logging_debug_enabled())
                                PERROR("futex");
                        goto end_wait;
                }
@@ -2061,7 +2062,7 @@ quit:
  * Weak symbol to call when the ust malloc wrapper is not loaded.
  */
 __attribute__((weak))
-void lttng_ust_libc_wrapper_malloc_init(void)
+void lttng_ust_libc_wrapper_malloc_ctor(void)
 {
 }
 
@@ -2070,10 +2071,10 @@ void lttng_ust_libc_wrapper_malloc_init(void)
  * sessiond by polling the application common named pipe.
  */
 static
-void lttng_ust_init(void)
+void lttng_ust_ctor(void)
        __attribute__((constructor));
 static
-void lttng_ust_init(void)
+void lttng_ust_ctor(void)
 {
        struct timespec constructor_timeout;
        sigset_t sig_all_blocked, orig_parent_mask;
@@ -2120,12 +2121,23 @@ void lttng_ust_init(void)
         * sessiond (otherwise leading to errors when trying to create
         * sessiond before the init functions are completed).
         */
-       ust_err_init();
-       lttng_ust_getenv_init();        /* Needs ust_err_init() to be completed. */
+
+       /*
+        * Both the logging and getenv lazy-initialization uses getenv()
+        * internally and thus needs to be explicitly initialized in
+        * liblttng-ust before we start any threads as an unsuspecting normally
+        * single threaded application using liblttng-ust could be using
+        * setenv() which is not thread-safe.
+        */
+       lttng_ust_logging_init();
+       lttng_ust_getenv_init();
+
+       /* Call the liblttng-ust-common constructor. */
+       lttng_ust_common_ctor();
+
        lttng_ust_tp_init();
-       lttng_ust_init_fd_tracker();
        lttng_ust_clock_init();
-       lttng_ust_getcpu_init();
+       lttng_ust_getcpu_plugin_init();
        lttng_ust_statedump_init();
        lttng_ust_ring_buffer_clients_init();
        lttng_ust_counter_clients_init();
@@ -2133,7 +2145,7 @@ void lttng_ust_init(void)
        /*
         * Invoke ust malloc wrapper init before starting other threads.
         */
-       lttng_ust_libc_wrapper_malloc_init();
+       lttng_ust_libc_wrapper_malloc_ctor();
 
        timeout_mode = get_constructor_timeout(&constructor_timeout);
 
@@ -2436,7 +2448,7 @@ void lttng_ust_after_fork_parent(sigset_t *restore_sigset)
  * After fork, in the child, we need to cleanup all the leftover state,
  * except the worker thread which already magically disappeared thanks
  * to the weird Linux fork semantics. After tyding up, we call
- * lttng_ust_init() again to start over as a new PID.
+ * lttng_ust_ctor() again to start over as a new PID.
  *
  * This is meant for forks() that have tracing in the child between the
  * fork and following exec call (if there is any).
@@ -2457,7 +2469,7 @@ void lttng_ust_after_fork_child(sigset_t *restore_sigset)
        lttng_ust_cleanup(0);
        /* Release mutexes and reenable signals */
        ust_after_fork_common(restore_sigset);
-       lttng_ust_init();
+       lttng_ust_ctor();
 }
 
 void lttng_ust_after_setns(void)
This page took 0.027006 seconds and 4 git commands to generate.