X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=libust%2Ftracepoint.c;h=2b45a88cd85c81f49c9e837e4676c22e0c65815d;hb=edaa143197d094019217dafbe2b291c660d2cf12;hp=6eb40ea29d46879a303c1dfe1d0107501cf06db1;hpb=49deb55988d873a8b8084ca75644b7d61c7a047c;p=lttng-ust.git diff --git a/libust/tracepoint.c b/libust/tracepoint.c index 6eb40ea2..2b45a88c 100644 --- a/libust/tracepoint.c +++ b/libust/tracepoint.c @@ -27,6 +27,7 @@ #include #include #include +#include #include @@ -637,6 +638,8 @@ int tracepoint_register_lib(struct tracepoint * const *tracepoints_start, { struct tracepoint_lib *pl, *iter; + init_tracepoint(); + pl = (struct tracepoint_lib *) zmalloc(sizeof(struct tracepoint_lib)); pl->tracepoints_start = tracepoints_start; @@ -688,18 +691,17 @@ int tracepoint_unregister_lib(struct tracepoint * const *tracepoints_start) return 0; } -void __attribute__((constructor)) init_tracepoint(void) +void init_tracepoint(void) { + if (uatomic_xchg(&initialized, 1) == 1) + return; init_usterr(); - if (!initialized) { - tracepoint_register_lib(__start___tracepoints_ptrs, - __stop___tracepoints_ptrs - - __start___tracepoints_ptrs); - initialized = 1; - } + tracepoint_register_lib(__start___tracepoints_ptrs, + __stop___tracepoints_ptrs + - __start___tracepoints_ptrs); } -void __attribute__((destructor)) destroy_tracepoint(void) +void exit_tracepoint(void) { tracepoint_unregister_lib(__start___tracepoints_ptrs); }