X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fevent.c;h=65e2edf3ad7726b8ed372fdb2985605548b923c5;hb=51755dc8c7607233c5f62b7931326d7d95df7910;hp=bedaa2e2f4e220e63c6458a1c7947aaa9081b3a3;hpb=a969e1019813f1e2354fe57c8393f6268d943414;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/event.c b/src/bin/lttng-sessiond/event.c index bedaa2e2f..65e2edf3a 100644 --- a/src/bin/lttng-sessiond/event.c +++ b/src/bin/lttng-sessiond/event.c @@ -33,6 +33,7 @@ #include "ust-app.h" #include "trace-kernel.h" #include "trace-ust.h" +#include "agent.h" /* * Add unique UST event based on the event name, filter bytecode and loglevel. @@ -185,103 +186,6 @@ end: * ============================ */ -/* - * Enable all UST tracepoints for a channel from a UST session. - */ -int event_ust_enable_all_tracepoints(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan, - char *filter_expression, - struct lttng_filter_bytecode *filter) -{ - int ret, i, size; - struct lttng_ht_iter iter; - struct ltt_ust_event *uevent = NULL; - struct lttng_event *events = NULL; - - assert(usess); - assert(uchan); - - rcu_read_lock(); - - /* Enable existing events */ - cds_lfht_for_each_entry(uchan->events->ht, &iter.iter, uevent, - node.node) { - if (uevent->enabled == 0) { - ret = ust_app_enable_event_glb(usess, uchan, uevent); - if (ret < 0) { - continue; - } - uevent->enabled = 1; - } - } - - /* Get all UST available events */ - size = ust_app_list_events(&events); - if (size < 0) { - ret = LTTNG_ERR_UST_LIST_FAIL; - goto error; - } - - for (i = 0; i < size; i++) { - /* - * Check if event exist and if so, continue since it was enable - * previously. - */ - uevent = trace_ust_find_event(uchan->events, events[i].name, filter, - events[i].loglevel, NULL); - if (uevent != NULL) { - ret = ust_app_enable_event_pid(usess, uchan, uevent, - events[i].pid); - if (ret < 0) { - if (ret != -LTTNG_UST_ERR_EXIST) { - ret = LTTNG_ERR_UST_ENABLE_FAIL; - goto error; - } - } - continue; - } - - /* Create ust event */ - uevent = trace_ust_create_event(&events[i], filter_expression, - filter, NULL); - if (uevent == NULL) { - ret = LTTNG_ERR_FATAL; - goto error_destroy; - } - - /* Create event for the specific PID */ - ret = ust_app_enable_event_pid(usess, uchan, uevent, - events[i].pid); - if (ret < 0) { - if (ret == -LTTNG_UST_ERR_EXIST) { - ret = LTTNG_ERR_UST_EVENT_EXIST; - goto error; - } else { - ret = LTTNG_ERR_UST_ENABLE_FAIL; - goto error_destroy; - } - } - - uevent->enabled = 1; - /* Add ltt ust event to channel */ - rcu_read_lock(); - add_unique_ust_event(uchan->events, uevent); - rcu_read_unlock(); - } - free(events); - - rcu_read_unlock(); - return LTTNG_OK; - -error_destroy: - trace_ust_destroy_event(uevent); - -error: - free(events); - rcu_read_unlock(); - return ret; -} - /* * Enable UST tracepoint event for a channel from a UST session. * We own filter_expression, filter, and exclusion. @@ -290,7 +194,8 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct lttng_event *event, char *filter_expression, struct lttng_filter_bytecode *filter, - struct lttng_event_exclusion *exclusion) + struct lttng_event_exclusion *exclusion, + bool internal_event) { int ret = LTTNG_OK, to_create = 0; struct ltt_ust_event *uevent; @@ -303,9 +208,9 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, uevent = trace_ust_find_event(uchan->events, event->name, filter, event->loglevel, exclusion); - if (uevent == NULL) { + if (!uevent) { uevent = trace_ust_create_event(event, filter_expression, - filter, exclusion); + filter, exclusion, internal_event); /* We have passed ownership */ filter_expression = NULL; filter = NULL; @@ -447,60 +352,6 @@ error: return ret; } -/* - * Disable all UST tracepoints for a channel from a UST session. - */ -int event_ust_disable_all_tracepoints(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan) -{ - int ret, i, size; - struct lttng_ht_iter iter; - struct ltt_ust_event *uevent = NULL; - struct lttng_event *events = NULL; - - assert(usess); - assert(uchan); - - rcu_read_lock(); - - /* Disabling existing events */ - cds_lfht_for_each_entry(uchan->events->ht, &iter.iter, uevent, - node.node) { - if (uevent->enabled == 1) { - ret = event_ust_disable_tracepoint(usess, uchan, - uevent->attr.name); - if (ret < 0) { - continue; - } - } - } - - /* Get all UST available events */ - size = ust_app_list_events(&events); - if (size < 0) { - ret = LTTNG_ERR_UST_LIST_FAIL; - goto error; - } - - for (i = 0; i < size; i++) { - ret = event_ust_disable_tracepoint(usess, uchan, - events[i].name); - if (ret != LTTNG_OK) { - /* Continue to disable the rest... */ - continue; - } - } - free(events); - - rcu_read_unlock(); - return LTTNG_OK; - -error: - free(events); - rcu_read_unlock(); - return ret; -} - /* * Enable all agent event for a given UST session. * @@ -508,7 +359,7 @@ error: */ int event_agent_enable_all(struct ltt_ust_session *usess, struct agent *agt, struct lttng_event *event, - struct lttng_filter_bytecode *filter) + struct lttng_filter_bytecode *filter ,char *filter_expression) { int ret; struct agent_event *aevent; @@ -519,7 +370,7 @@ int event_agent_enable_all(struct ltt_ust_session *usess, DBG("Event agent enabling ALL events for session %" PRIu64, usess->id); /* Enable event on agent application through TCP socket. */ - ret = event_agent_enable(usess, agt, event, filter); + ret = event_agent_enable(usess, agt, event, filter, filter_expression); if (ret != LTTNG_OK) { goto error; } @@ -545,7 +396,8 @@ error: */ int event_agent_enable(struct ltt_ust_session *usess, struct agent *agt, struct lttng_event *event, - struct lttng_filter_bytecode *filter) + struct lttng_filter_bytecode *filter, + char *filter_expression) { int ret, created = 0; struct agent_event *aevent; @@ -555,18 +407,19 @@ int event_agent_enable(struct ltt_ust_session *usess, assert(agt); DBG("Event agent enabling %s for session %" PRIu64 " with loglevel type %d " - "and loglevel %d", event->name, usess->id, event->loglevel_type, - event->loglevel); + ", loglevel %d and filter \"%s\"", event->name, + usess->id, event->loglevel_type, event->loglevel, + filter_expression ? filter_expression : "NULL"); aevent = agent_find_event(event->name, event->loglevel, agt); if (!aevent) { - aevent = agent_create_event(event->name, filter); + aevent = agent_create_event(event->name, event->loglevel, + event->loglevel_type, filter, + filter_expression); if (!aevent) { ret = LTTNG_ERR_NOMEM; goto error; } - aevent->loglevel = event->loglevel; - aevent->loglevel_type = event->loglevel_type; created = 1; } @@ -596,8 +449,8 @@ error: } /* - * Return the agent default event name to use by testing if the process is root - * or not. Return NULL on error. + * Return the default event name associated with the provided UST domain. Return + * NULL on error. */ const char *event_get_default_agent_ust_name(enum lttng_domain_type domain) { @@ -605,21 +458,13 @@ const char *event_get_default_agent_ust_name(enum lttng_domain_type domain) switch (domain) { case LTTNG_DOMAIN_LOG4J: - if (is_root) { - default_event_name = DEFAULT_SYS_LOG4J_EVENT_NAME; - } else { - default_event_name = DEFAULT_USER_LOG4J_EVENT_NAME; - } + default_event_name = DEFAULT_LOG4J_EVENT_NAME; break; case LTTNG_DOMAIN_JUL: - if (is_root) { - default_event_name = DEFAULT_SYS_JUL_EVENT_NAME; - } else { - default_event_name = DEFAULT_USER_JUL_EVENT_NAME; - } + default_event_name = DEFAULT_JUL_EVENT_NAME; break; case LTTNG_DOMAIN_PYTHON: - default_event_name = DEFAULT_USER_PYTHON_EVENT_NAME; + default_event_name = DEFAULT_PYTHON_EVENT_NAME; break; default: assert(0);