Fix: perform lazy initialization of getenv common lib
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 13 Apr 2021 21:24:50 +0000 (17:24 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 13 Apr 2021 21:24:50 +0000 (17:24 -0400)
The ust-dl wrapper ends up calling into the getenv common lib very early
from library constructors through use of dlopen by the tracepoint
instrumentation code.

This happens before the getenv common lib is explicitly initialized by
liblttng-ust's contructor.

Perform lazy initialization for those early use by constructor
scenarios.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I9f84bb776a62e03b11db0386e267df00eb165ddd

src/common/getenv.c

index 1909f4cf912bd8f80ebf51e6fc5dd88bb866607c..23029508b161d126590d8ed3bbcc943e0e23aa8c 100644 (file)
@@ -64,8 +64,11 @@ char *lttng_ust_getenv(const char *name)
        struct lttng_env *e;
        bool found = false;
 
-       if (!CMM_LOAD_SHARED(lttng_ust_getenv_is_init))
-               abort();
+       /*
+        * Perform lazy initialization of lttng_ust_getenv for early use
+        * by library constructors.
+        */
+       lttng_ust_getenv_init();
 
        for (i = 0; i < LTTNG_ARRAY_SIZE(lttng_env); i++) {
                e = &lttng_env[i];
This page took 0.025211 seconds and 4 git commands to generate.