X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=ltt-events.c;h=cf4fc8b77158fb0f0c398d49249dacce16511ad4;hb=d3dbe23cbd102fb87206b6ed78aad28e042ac77e;hp=29d0ed749b78db62258e22506231452c0397bf19;hpb=f17701fb89c69c3950c22a0c20d0233092e7d6ed;p=lttng-modules.git diff --git a/ltt-events.c b/ltt-events.c index 29d0ed74..cf4fc8b7 100644 --- a/ltt-events.c +++ b/ltt-events.c @@ -203,7 +203,6 @@ void _ltt_channel_destroy(struct ltt_channel *chan) */ struct ltt_event *ltt_event_create(struct ltt_channel *chan, char *name, struct lttng_kernel_event *event_param, - const struct lttng_event_desc *event_desc, void *filter) { struct ltt_event *event; @@ -223,7 +222,6 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan, char *name, if (!event) goto cache_error; event->chan = chan; - event->desc = event_desc; event->filter = filter; event->id = chan->free_event_id++; event->instrumentation = event_param->instrumentation; @@ -231,8 +229,12 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan, char *name, smp_wmb(); switch (event_param->instrumentation) { case LTTNG_KERNEL_TRACEPOINTS: - ret = tracepoint_probe_register(name, event_desc->probe_callback, - event); + event->desc = ltt_event_get(name); + if (!event->desc) + goto register_error; + ret = tracepoint_probe_register(name, + event->desc->probe_callback, + event); if (ret) goto register_error; break; @@ -256,8 +258,10 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan, char *name, return event; statedump_error: - WARN_ON_ONCE(tracepoint_probe_unregister(name, event_desc->probe_callback, - event)); + WARN_ON_ONCE(tracepoint_probe_unregister(name, + event->desc->probe_callback, + event)); + ltt_event_put(event->desc); register_error: kmem_cache_free(event_cache, event); cache_error: @@ -281,6 +285,7 @@ int _ltt_event_unregister(struct ltt_event *event) event); if (ret) return ret; + ltt_event_put(event->desc); break; case LTTNG_KERNEL_KPROBES: lttng_kprobes_unregister(event);