X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Fltt-probes.c;h=66ee971cc2d9dac7b1de6e85216ad78097efe4a5;hb=4318ae1be57eb7983ab4857a7a8eeb4a030a8216;hp=5b3a0cb217c208878d957f114aae2c7cf787b1bb;hpb=8d8a24c8565ce6dce7e7bd1045a95d1d2af5e536;p=lttng-ust.git diff --git a/libust/ltt-probes.c b/libust/ltt-probes.c index 5b3a0cb2..66ee971c 100644 --- a/libust/ltt-probes.c +++ b/libust/ltt-probes.c @@ -11,11 +11,15 @@ #include #include #include -#include -#include +#include +#include +#include "ltt-tracer-core.h" + +/* + * probe list is protected by ust_lock()/ust_unlock(). + */ static CDS_LIST_HEAD(probe_list); -static DEFINE_MUTEX(probe_mutex); static const struct lttng_event_desc *find_event(const char *name) @@ -37,7 +41,7 @@ int ltt_probe_register(struct lttng_probe_desc *desc) int ret = 0; int i; - pthread_mutex_lock(&probe_mutex); + ust_lock(); /* * TODO: This is O(N^2). Turn into a hash table when probe registration * overhead becomes an issue. @@ -49,25 +53,34 @@ int ltt_probe_register(struct lttng_probe_desc *desc) } } cds_list_add(&desc->head, &probe_list); + + /* + * fix the events awaiting probe load. + */ + for (i = 0; i < desc->nr_events; i++) { + ret = pending_probe_fix_events(&desc->event_desc[i]); + assert(!ret); + } end: - pthread_mutex_unlock(&probe_mutex); + ust_unlock(); return ret; } void ltt_probe_unregister(struct lttng_probe_desc *desc) { - pthread_mutex_lock(&probe_mutex); + ust_lock(); cds_list_del(&desc->head); - pthread_mutex_unlock(&probe_mutex); + ust_unlock(); } +/* + * called with UST lock held. + */ const struct lttng_event_desc *ltt_event_get(const char *name) { const struct lttng_event_desc *event; - pthread_mutex_lock(&probe_mutex); event = find_event(name); - pthread_mutex_unlock(&probe_mutex); if (!event) return NULL; return event;