X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fevent.c;h=b0b37bed777a4eb5b537b0739c14115b5e3020a2;hp=0a46ffb4bc0fb338c7b47af262dc49c14df5ec46;hb=b0a23296344e57bd2e48e62ec2d7e0d8a38661bb;hpb=3968741092cac3eaf33f7bf558bb2b476189470b diff --git a/src/bin/lttng-sessiond/event.c b/src/bin/lttng-sessiond/event.c index 0a46ffb4b..b0b37bed7 100644 --- a/src/bin/lttng-sessiond/event.c +++ b/src/bin/lttng-sessiond/event.c @@ -162,7 +162,7 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, struct lttng_event_exclusion *exclusion, bool internal_event) { - int ret, to_create = 0; + int ret = LTTNG_OK, to_create = 0; struct ltt_ust_event *uevent; assert(usess); @@ -195,6 +195,14 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, } uevent->enabled = 1; + if (to_create) { + /* Add ltt ust event to channel */ + add_unique_ust_event(uchan->events, uevent); + } + + if (!usess->active) { + goto end; + } if (to_create) { /* Create event on all UST registered apps for session */ @@ -214,11 +222,6 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, } } - if (to_create) { - /* Add ltt ust event to channel */ - add_unique_ust_event(uchan->events, uevent); - } - DBG("Event UST %s %s in channel %s", uevent->attr.name, to_create ? "created" : "enabled", uchan->name); @@ -291,17 +294,18 @@ int event_ust_disable_tracepoint(struct ltt_ust_session *usess, /* It's already disabled so everything is OK */ goto next; } + uevent->enabled = 0; + DBG2("Event UST %s disabled in channel %s", uevent->attr.name, + uchan->name); + if (!usess->active) { + goto next; + } ret = ust_app_disable_event_glb(usess, uchan, uevent); if (ret < 0 && ret != -LTTNG_UST_ERR_EXIST) { ret = LTTNG_ERR_UST_DISABLE_FAIL; goto error; } - uevent->enabled = 0; - - DBG2("Event UST %s disabled in channel %s", uevent->attr.name, - uchan->name); - next: /* Get next duplicate event by name. */ cds_lfht_next_duplicate(ht->ht, trace_ust_ht_match_event_by_name, @@ -502,15 +506,11 @@ int event_agent_enable(struct ltt_ust_session *usess, ret = LTTNG_ERR_NOMEM; goto error; } - + filter = NULL; + filter_expression = NULL; created = 1; } - /* Already enabled? */ - if (aevent->enabled) { - goto end; - } - if (created && filter) { ret = add_filter_app_ctx(filter, filter_expression, agt); if (ret != LTTNG_OK) { @@ -518,6 +518,12 @@ int event_agent_enable(struct ltt_ust_session *usess, } } + /* Already enabled? */ + if (aevent->enabled) { + ret = LTTNG_OK; + goto end; + } + ret = agent_enable_event(aevent, agt->domain); if (ret != LTTNG_OK) { goto error; @@ -528,13 +534,16 @@ int event_agent_enable(struct ltt_ust_session *usess, agent_add_event(aevent, agt); } -end: - return LTTNG_OK; + ret = LTTNG_OK; + goto end; error: if (created) { agent_destroy_event(aevent); } +end: + free(filter); + free(filter_expression); return ret; } @@ -629,10 +638,12 @@ static int event_agent_disable_one(struct ltt_ust_session *usess, /* If the agent event exists, it must be available on the UST side. */ assert(uevent); - ret = ust_app_disable_event_glb(usess, uchan, uevent); - if (ret < 0 && ret != -LTTNG_UST_ERR_EXIST) { - ret = LTTNG_ERR_UST_DISABLE_FAIL; - goto error; + if (usess->active) { + ret = ust_app_disable_event_glb(usess, uchan, uevent); + if (ret < 0 && ret != -LTTNG_UST_ERR_EXIST) { + ret = LTTNG_ERR_UST_DISABLE_FAIL; + goto error; + } } /*