X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=libust%2Ftracepoint.c;h=5a834a3fc91ed8956c0faba7cba65878b8bad458;hb=b467f7a77d78880b71ec10d8fa8904da7d28043e;hp=ca40902494f61b9785a1e0b863852dca4694aff3;hpb=5f63bcb39ce2f0982a2c38148d4fca7e8acdc123;p=ust.git diff --git a/libust/tracepoint.c b/libust/tracepoint.c index ca40902..5a834a3 100644 --- a/libust/tracepoint.c +++ b/libust/tracepoint.c @@ -660,7 +660,7 @@ static void new_tracepoints(struct tracepoint * const *start, struct tracepoint int tracepoint_register_lib(struct tracepoint * const *tracepoints_start, int tracepoints_count) { - struct tracepoint_lib *pl; + struct tracepoint_lib *pl, *iter; pl = (struct tracepoint_lib *) zmalloc(sizeof(struct tracepoint_lib)); @@ -669,7 +669,20 @@ int tracepoint_register_lib(struct tracepoint * const *tracepoints_start, int tr /* FIXME: maybe protect this with its own mutex? */ pthread_mutex_lock(&tracepoints_mutex); + /* + * 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: pthread_mutex_unlock(&tracepoints_mutex); new_tracepoints(tracepoints_start, tracepoints_start + tracepoints_count);