Introduce LTTNG_UST_LOADED environment variable
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 12 Jul 2016 19:11:06 +0000 (15:11 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 12 Jul 2016 19:46:36 +0000 (15:46 -0400)
Set internally by liblttng-ust's constructor. Can be used by
applications to detect if lttng-ust is loaded, even if liblttng-ust is
not directly linked by the application.

The main use-case is to allow applications to detect that they should
not try to close file descriptors that do not belong to them (e.g.
BSD closefrom). This is a common pattern with applications invoking
daemon(3).

Note that this environment variable is passed to children of a traced
process, and through exec calls. Therefore, an application might think
that lttng-ust is loaded even though it's not loaded in its own address
space if it was loaded by one of its parent processes.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
doc/man/lttng-ust.3.txt
liblttng-ust/lttng-ust-comm.c

index 7a23943daf9eb134f46dba17459a120fcaf3d219..a1d4f204c26ff47367902bdd04d2c1f6b355fe46 100644 (file)
@@ -1113,6 +1113,15 @@ are located in a specific directory under `$LTTNG_HOME` (or `$HOME` if
     documentation under
     https://github.com/lttng/lttng-ust/tree/master/doc/examples/getcpu-override[`examples/getcpu-override`].
 
+`LTTNG_UST_LOADED`::
+    Set internally by `liblttng-ust`'s constructor. Can be used by
+    applications to detect if lttng-ust is loaded, even if liblttng-ust
+    is not directly linked by the application. This environment
+    variable stays set across fork and exec, so an application could
+    observe this environment variable being set if a parent process had
+    lttng-ust loaded when issuing fork, even if this application does
+    not have lttng-ust in its address space.
+
 `LTTNG_UST_REGISTER_TIMEOUT`::
     Waiting time for the _registration done_ session daemon command
     before proceeding to execute the main program (milliseconds).
index 6105403a25d032b618df9c6202644ff138a0a034..cc9b6b5e1e8706a1b941de1b0d09ea37dddaffd3 100644 (file)
@@ -1547,6 +1547,13 @@ void lttng_ust_malloc_wrapper_init(void)
 {
 }
 
+static
+void init_ust_env(void)
+{
+       if (putenv("LTTNG_UST_LOADED=1"))
+               DBG("Error setting LTTNG_UST_LOADED environment variable");
+}
+
 /*
  * sessiond monitoring thread: monitor presence of global and per-user
  * sessiond by polling the application common named pipe.
@@ -1574,6 +1581,8 @@ void __attribute__((constructor)) lttng_ust_init(void)
        lttng_fixup_procname_tls();
        lttng_fixup_ust_mutex_nest_tls();
 
+       init_ust_env();
+
        /*
         * We want precise control over the order in which we construct
         * our sub-libraries vs starting to receive commands from
This page took 0.027967 seconds and 4 git commands to generate.