X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Fmarker.c;h=d2fee49c9c2c5076de75b6b407efc7f657933b99;hb=7166e240639cec06f4273f65059300f98b5296f6;hp=ef6f029ac65a2dc75ccb6d84a69c823f74c6af20;hpb=dc2848112a55ee60632491148089cc60984f683d;p=ust.git diff --git a/libust/marker.c b/libust/marker.c index ef6f029..d2fee49 100644 --- a/libust/marker.c +++ b/libust/marker.c @@ -20,6 +20,7 @@ #include #define _LGPL_SOURCE #include +#include #include #include @@ -1382,11 +1383,28 @@ int marker_register_lib(struct marker *markers_start, int markers_count) return 0; } -int marker_unregister_lib(struct marker *markers_start, int markers_count) +int marker_unregister_lib(struct marker *markers_start) { + struct lib *lib; + /*FIXME: implement; but before implementing, marker_register_lib must have appropriate locking. */ + lock_markers(); + + /* FIXME: we should probably take a mutex here on libs */ +//ust// mutex_lock(&module_mutex); + list_for_each_entry(lib, &libs, list) { + if(lib->markers_start == markers_start) { + struct lib *lib2free = lib; + list_del(&lib->list); + free(lib2free); + break; + } + } + + unlock_markers(); + return 0; } @@ -1396,7 +1414,11 @@ void __attribute__((constructor)) init_markers(void) { if(!initialized) { marker_register_lib(__start___markers, (((long)__stop___markers)-((long)__start___markers))/sizeof(struct marker)); - //DBG("markers_start: %p, markers_stop: %p\n", __start___markers, __stop___markers); initialized = 1; } } + +void __attribute__((constructor)) destroy_markers(void) +{ + marker_unregister_lib(__start___markers); +}