X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=liblttng-ust%2Fltt-events.c;h=9d5d882794dbe9a555405a3c0f0f84b8714f93b0;hb=f7802f4bacd5a25cdaf46c5ccfb1f0bd1fdf9cfc;hp=52feeb08a7dad9c9bc9970a39197a586f9305612;hpb=457a6b5879a7dd8cdd1b5b22b20d028a59489159;p=lttng-ust.git diff --git a/liblttng-ust/ltt-events.c b/liblttng-ust/ltt-events.c index 52feeb08..9d5d8827 100644 --- a/liblttng-ust/ltt-events.c +++ b/liblttng-ust/ltt-events.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "clock.h" #include @@ -43,6 +44,8 @@ #include "../libringbuffer/shm.h" #include "jhash.h" +#define PROCNAME_LEN 17 + /* * The sessions mutex is the centralized mutex across UST tracing * control and probe registration. All operations within this file are @@ -260,8 +263,7 @@ int pending_probe_fix_events(const struct lttng_event_desc *desc) struct ltt_event *event; struct ltt_channel *chan; - event = e->event; - if (!ltt_loglevel_match(event->desc, + if (!ltt_loglevel_match(desc, e->loglevel_type, e->loglevel)) { continue; @@ -269,6 +271,7 @@ int pending_probe_fix_events(const struct lttng_event_desc *desc) if (strncmp(name, e->name, LTTNG_UST_SYM_NAME_LEN - 1)) { continue; } + event = e->event; chan = event->chan; assert(!event->desc); event->desc = desc; @@ -512,12 +515,18 @@ int ltt_event_create(struct ltt_channel *chan, */ if (event_param->instrumentation == LTTNG_UST_TRACEPOINT) { desc = ltt_event_get(event_param->name); - if (!ltt_loglevel_match(desc, - event_param->loglevel_type, - event_param->loglevel)) { - ret = -EPERM; - goto no_loglevel_match; + if (desc) { + if (!ltt_loglevel_match(desc, + event_param->loglevel_type, + event_param->loglevel)) { + ret = -EPERM; + goto no_loglevel_match; + } } + /* + * If descriptor is not there, it will be added to + * pending probes. + */ } event = zmalloc(sizeof(struct ltt_event)); if (!event) { @@ -1082,6 +1091,7 @@ int _ltt_session_metadata_statedump(struct ltt_session *session) struct ltt_channel *chan; struct ltt_event *event; int ret = 0; + char procname[PROCNAME_LEN] = ""; if (!CMM_ACCESS_ONCE(session->active)) return 0; @@ -1134,6 +1144,22 @@ int _ltt_session_metadata_statedump(struct ltt_session *session) if (ret) goto end; + /* ignore error, just use empty string if error. */ + (void) prctl(PR_GET_NAME, (unsigned long) procname, 0, 0, 0); + procname[PROCNAME_LEN - 1] = '\0'; + ret = lttng_metadata_printf(session, + "env {\n" + " vpid = %d;\n" + " procname = \"%s\";\n" + " domain = %s;\n" + "};\n\n", + (int) getpid(), + procname, + "ust" + ); + if (ret) + goto end; + ret = lttng_metadata_printf(session, "clock {\n" " name = %s;\n",