X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=libust%2Fmarker.c;h=d2fee49c9c2c5076de75b6b407efc7f657933b99;hb=24b6668c651f21d415b4f3a4533c7c6c6692aa73;hp=4a3e16b96c7dd365aa352be1b0882f59390ff6d2;hpb=2f03197d3d05b272f82ed261a0a7b2bbb2f66ab0;p=ust.git diff --git a/libust/marker.c b/libust/marker.c index 4a3e16b..d2fee49 100644 --- a/libust/marker.c +++ b/libust/marker.c @@ -1383,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; } @@ -1397,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); +}