From 0dcfcf94b356c12e3936fa27f350896d96724e4e Mon Sep 17 00:00:00 2001 From: David Goulet Date: Fri, 5 Sep 2014 12:13:55 -0400 Subject: [PATCH] Fix: disable-event for an agent domain This fixes the disable-event command for an agent that was not working properly in the case an application was spawned after the command. Also, for the disable all event command for an agent, the disable command will try first to disable the '*' event and will disable all already existing events after. This is to make sure the refcount on the agent side is synchronized with the amount of enable event prior. Fixes #831 Signed-off-by: David Goulet --- src/bin/lttng-sessiond/event.c | 41 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/bin/lttng-sessiond/event.c b/src/bin/lttng-sessiond/event.c index 52fd9f547..7c42a928a 100644 --- a/src/bin/lttng-sessiond/event.c +++ b/src/bin/lttng-sessiond/event.c @@ -774,6 +774,12 @@ int event_agent_disable(struct ltt_ust_session *usess, struct agent *agt, goto error; } + /* + * Flag event that it's disabled so the shadow copy on the ust app side + * will disable it if an application shows up. + */ + uevent->enabled = 0; + ret = agent_disable_event(aevent, agt->domain); if (ret != LTTNG_OK) { goto error; @@ -793,40 +799,35 @@ error: int event_agent_disable_all(struct ltt_ust_session *usess, struct agent *agt) { - int ret, do_disable = 0; + int ret; struct agent_event *aevent; struct lttng_ht_iter iter; assert(agt); assert(usess); - /* Disable event on agent application through TCP socket. */ + /* + * Disable event on agent application. Continue to disable all other events + * if the * event is not found. + */ ret = event_agent_disable(usess, agt, "*"); - if (ret != LTTNG_OK) { - if (ret == LTTNG_ERR_UST_EVENT_NOT_FOUND) { - /* - * This means that no enable all was done before but still a user - * could want to disable everything even though the * wild card - * event does not exists. - */ - do_disable = 1; - } else { - goto error; - } + if (ret != LTTNG_OK && ret != LTTNG_ERR_UST_EVENT_NOT_FOUND) { + goto error; } /* Flag every event that they are now enabled. */ rcu_read_lock(); cds_lfht_for_each_entry(agt->events->ht, &iter.iter, aevent, node.node) { - if (aevent->enabled && do_disable) { - ret = event_agent_disable(usess, agt, aevent->name); - if (ret != LTTNG_OK) { - rcu_read_unlock(); - goto error; - } + if (!aevent->enabled) { + continue; + } + + ret = event_agent_disable(usess, agt, aevent->name); + if (ret != LTTNG_OK) { + rcu_read_unlock(); + goto error; } - aevent->enabled = 0; } rcu_read_unlock(); -- 2.34.1