From: Mathieu Desnoyers Date: Wed, 25 May 2016 21:19:35 +0000 (-0400) Subject: Fix: initialize RCU callbacks with mixed LGPL/non-LGPL objects X-Git-Tag: v2.7.5~20 X-Git-Url: http://git.lttng.org/?p=lttng-ust.git;a=commitdiff_plain;h=a32e282d91b5b82fcc5cde936175bbb268ee9e0c Fix: initialize RCU callbacks with mixed LGPL/non-LGPL objects Linking both _LGPL_SOURCE and non-_LGPL_SOURCE objects into the same module may result in having the RCU callbacks left to NULL, which prevents tracing for tracepoints and/or probes which sit in the non-LGPL compile unit. This happens if the contructor of the LGPL compile unit is executed first, thus incrementing the __tracepoint_registered counter, which will prevent later execution of that same constructor in the non-LGPL compile unit to initialize the RCU callbacks in __tracepoint__init_urcu_sym(). Signed-off-by: Jérémie Galarneau Signed-off-by: Mathieu Desnoyers --- diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h index 17cbd41f..c80da921 100644 --- a/include/lttng/tracepoint.h +++ b/include/lttng/tracepoint.h @@ -294,8 +294,12 @@ __tracepoints__init(void); static void __tracepoints__init(void) { - if (__tracepoint_registered++) + if (__tracepoint_registered++) { + if (!tracepoint_dlopen_ptr->liblttngust_handle) + return; + __tracepoint__init_urcu_sym(); return; + } if (!tracepoint_dlopen_ptr) tracepoint_dlopen_ptr = &tracepoint_dlopen;