* Expose a canary symbol of the previous ABI to ensure we catch uses of a
* liblttng-ust.so.0 dlopen'd after .so.1 has been loaded. Use a different
* symbol than the detection code to ensure we don't detect ourself.
* Expose a canary symbol of the previous ABI to ensure we catch uses of a
* liblttng-ust.so.0 dlopen'd after .so.1 has been loaded. Use a different
* symbol than the detection code to ensure we don't detect ourself.
* this library so it never becomes zero, thus never gets unloaded from the
* address space of the process. Since we are already running in the
* constructor of the LTTNG_UST_LIB_SONAME library, calling dlopen will
* this library so it never becomes zero, thus never gets unloaded from the
* address space of the process. Since we are already running in the
* constructor of the LTTNG_UST_LIB_SONAME library, calling dlopen will
* dynamic loader as the shared library is already loaded in the address
* space. As a safe guard, we use the RTLD_NODELETE flag to prevent
* unloading of the UST library if its refcount becomes zero (which should
* dynamic loader as the shared library is already loaded in the address
* space. As a safe guard, we use the RTLD_NODELETE flag to prevent
* unloading of the UST library if its refcount becomes zero (which should
return;
DBG("process %d", getpid());
lttng_ust_urcu_after_fork_parent();
return;
DBG("process %d", getpid());
lttng_ust_urcu_after_fork_parent();