From: Christian Babeux Date: Tue, 4 Dec 2012 21:52:41 +0000 (-0500) Subject: Cygwin: Fix multiple loaded instances of liblttng-ust-tracepoint due to dlopen X-Git-Url: http://git.lttng.org/?p=lttng-ust.git;a=commitdiff_plain;h=ecab630c1e78a4b720f448917e92d43ada48d06d Cygwin: Fix multiple loaded instances of liblttng-ust-tracepoint due to dlopen Multiple instances of the liblttng-ust-tracepoint were present in memory and caused duplication and incoherence of various data structures (such as the tracepoints hashtable). This is due to the dlopen(3) of liblttng-ust-tracepoint in applications that were already linked against liblttng-ust-tracepoint. This commit introduce a new restriction on application tracing: the applications must be linked against liblttng-ust-tracepoint. --- diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h index 01561d81..7d714db8 100644 --- a/include/lttng/tracepoint.h +++ b/include/lttng/tracepoint.h @@ -249,30 +249,26 @@ static void __attribute__((constructor)) __tracepoints__init(void) if (__tracepoint_registered++) return; - tracepoint_dlopen.liblttngust_handle = - dlopen("liblttng-ust-tracepoint.so.0", RTLD_NOW | RTLD_GLOBAL); - if (!tracepoint_dlopen.liblttngust_handle) - return; tracepoint_dlopen.tracepoint_register_lib = URCU_FORCE_CAST(int (*)(struct tracepoint * const *, int), - dlsym(tracepoint_dlopen.liblttngust_handle, + dlsym(RTLD_DEFAULT, "tracepoint_register_lib")); tracepoint_dlopen.tracepoint_unregister_lib = URCU_FORCE_CAST(int (*)(struct tracepoint * const *), - dlsym(tracepoint_dlopen.liblttngust_handle, + dlsym(RTLD_DEFAULT, "tracepoint_unregister_lib")); #ifndef _LGPL_SOURCE tracepoint_dlopen.rcu_read_lock_sym_bp = URCU_FORCE_CAST(void (*)(void), - dlsym(tracepoint_dlopen.liblttngust_handle, + dlsym(RTLD_DEFAULT, "tp_rcu_read_lock_bp")); tracepoint_dlopen.rcu_read_unlock_sym_bp = URCU_FORCE_CAST(void (*)(void), - dlsym(tracepoint_dlopen.liblttngust_handle, + dlsym(RTLD_DEFAULT, "tp_rcu_read_unlock_bp")); tracepoint_dlopen.rcu_dereference_sym_bp = URCU_FORCE_CAST(void *(*)(void *p), - dlsym(tracepoint_dlopen.liblttngust_handle, + dlsym(RTLD_DEFAULT, "tp_rcu_dereference_sym_bp")); #endif tracepoint_dlopen.tracepoint_register_lib(__start___tracepoints_ptrs,