X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Fmarker.c;h=19baba08392bfe73be89ef2fef5d9c2f1aece28d;hb=cd6b724338f1156ce7281f00a06ea848bec7213c;hp=8ca028c3e0f38f36cbadf18fabcb413452a6011c;hpb=900e307ed99ca9cb4bfe574ee4f4e1bd9c1baccc;p=ust.git diff --git a/libust/marker.c b/libust/marker.c index 8ca028c..19baba0 100644 --- a/libust/marker.c +++ b/libust/marker.c @@ -1350,7 +1350,7 @@ static void new_markers(struct marker * const *start, struct marker * const *end int marker_register_lib(struct marker * const *markers_start, int markers_count) { - struct lib *pl; + struct lib *pl, *iter; pl = (struct lib *) zmalloc(sizeof(struct lib)); @@ -1359,7 +1359,21 @@ int marker_register_lib(struct marker * const *markers_start, int markers_count) /* FIXME: maybe protect this with its own mutex? */ lock_markers(); + + /* + * We sort the libs by struct lib pointer address. + */ + cds_list_for_each_entry_reverse(iter, &libs, list) { + BUG_ON(iter == pl); /* Should never be in the list twice */ + if (iter < pl) { + /* We belong to the location right after iter. */ + cds_list_add(&pl->list, &iter->list); + goto lib_added; + } + } + /* We should be added at the head of the list */ cds_list_add(&pl->list, &libs); +lib_added: unlock_markers(); new_markers(markers_start, markers_start + markers_count); @@ -1409,7 +1423,7 @@ void __attribute__((constructor)) init_markers(void) } } -void __attribute__((constructor)) destroy_markers(void) +void __attribute__((destructor)) destroy_markers(void) { marker_unregister_lib(__start___markers_ptrs); }