X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;ds=sidebyside;f=src%2Fbin%2Flttng-sessiond%2Fevent.cpp;h=462ed2f0db588fdd1ad37debd9bf6d2609ef079c;hb=04938faeeb4b28c5791029a2542848534ac83b17;hp=4e52dfa9d5145882f48635cb399cf4aafff8ca78;hpb=28ab034a2c3582d07d3423d2d746731f87d3969f;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/event.cpp b/src/bin/lttng-sessiond/event.cpp index 4e52dfa9d..462ed2f0d 100644 --- a/src/bin/lttng-sessiond/event.cpp +++ b/src/bin/lttng-sessiond/event.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -80,7 +81,7 @@ int event_kernel_disable_event(struct ltt_kernel_channel *kchan, cds_list_for_each_entry (kevent, &kchan->events_list.head, list) { if (type != LTTNG_EVENT_ALL && kevent->type != type) continue; - if (event_name != NULL && strcmp(event_name, kevent->event->name)) { + if (event_name != nullptr && strcmp(event_name, kevent->event->name) != 0) { continue; } found++; @@ -95,7 +96,7 @@ int event_kernel_disable_event(struct ltt_kernel_channel *kchan, event_name ? event_name : "NULL", type); - if (event_name != NULL && !found) { + if (event_name != nullptr && !found) { ret = LTTNG_ERR_NO_EVENT; } else { ret = error ? LTTNG_ERR_KERN_DISABLE_FAIL : LTTNG_OK; @@ -120,15 +121,15 @@ int event_kernel_enable_event(struct ltt_kernel_channel *kchan, LTTNG_ASSERT(event); kevent = trace_kernel_find_event(event->name, kchan, event->type, filter); - if (kevent == NULL) { + if (kevent == nullptr) { ret = kernel_create_event(event, kchan, filter_expression, filter); /* We have passed ownership */ - filter_expression = NULL; - filter = NULL; + filter_expression = nullptr; + filter = nullptr; if (ret) { goto end; } - } else if (kevent->enabled == 0) { + } else if (!kevent->enabled) { ret = kernel_enable_event(kevent); if (ret < 0) { ret = LTTNG_ERR_KERN_ENABLE_FAIL; @@ -172,7 +173,7 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, LTTNG_ASSERT(uchan); LTTNG_ASSERT(event); - rcu_read_lock(); + lttng::urcu::read_lock_guard read_lock; uevent = trace_ust_find_event(uchan->events, event->name, @@ -184,9 +185,9 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, ret = trace_ust_create_event( event, filter_expression, filter, exclusion, internal_event, &uevent); /* We have passed ownership */ - filter_expression = NULL; - filter = NULL; - exclusion = NULL; + filter_expression = nullptr; + filter = nullptr; + exclusion = nullptr; if (ret != LTTNG_OK) { goto end; } @@ -202,7 +203,7 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, goto end; } - uevent->enabled = 1; + uevent->enabled = true; if (to_create) { /* Add ltt ust event to channel */ add_unique_ust_event(uchan->events, uevent); @@ -237,7 +238,6 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess, ret = LTTNG_OK; end: - rcu_read_unlock(); free(filter_expression); free(filter); free(exclusion); @@ -263,7 +263,7 @@ int event_ust_disable_tracepoint(struct ltt_ust_session *usess, ht = uchan->events; - rcu_read_lock(); + lttng::urcu::read_lock_guard read_lock; /* * We use a custom lookup since we need the iterator for the next_duplicate @@ -275,7 +275,7 @@ int event_ust_disable_tracepoint(struct ltt_ust_session *usess, event_name, &iter.iter); node = lttng_ht_iter_get_node_str(&iter); - if (node == NULL) { + if (node == nullptr) { DBG2("Trace UST event NOT found by name %s", event_name); ret = LTTNG_ERR_UST_EVENT_NOT_FOUND; goto error; @@ -285,11 +285,11 @@ int event_ust_disable_tracepoint(struct ltt_ust_session *usess, uevent = lttng::utils::container_of(node, <t_ust_event::node); LTTNG_ASSERT(uevent); - if (uevent->enabled == 0) { + if (!uevent->enabled) { /* It's already disabled so everything is OK */ goto next; } - uevent->enabled = 0; + uevent->enabled = false; DBG2("Event UST %s disabled in channel %s", uevent->attr.name, uchan->name); if (!usess->active) { @@ -310,7 +310,6 @@ int event_ust_disable_tracepoint(struct ltt_ust_session *usess, ret = LTTNG_OK; error: - rcu_read_unlock(); return ret; } @@ -321,21 +320,23 @@ int event_ust_disable_all_tracepoints(struct ltt_ust_session *usess, struct ltt_ { int ret, i, size, error = 0; struct lttng_ht_iter iter; - struct ltt_ust_event *uevent = NULL; - struct lttng_event *events = NULL; + struct ltt_ust_event *uevent = nullptr; + struct lttng_event *events = nullptr; LTTNG_ASSERT(usess); LTTNG_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) { - error = LTTNG_ERR_UST_DISABLE_FAIL; - continue; + { + lttng::urcu::read_lock_guard read_lock; + + cds_lfht_for_each_entry (uchan->events->ht, &iter.iter, uevent, node.node) { + if (uevent->enabled) { + ret = event_ust_disable_tracepoint(usess, uchan, uevent->attr.name); + if (ret < 0) { + error = LTTNG_ERR_UST_DISABLE_FAIL; + continue; + } } } } @@ -358,7 +359,6 @@ int event_ust_disable_all_tracepoints(struct ltt_ust_session *usess, struct ltt_ ret = error ? error : LTTNG_OK; error: - rcu_read_unlock(); free(events); return ret; } @@ -368,12 +368,14 @@ static void agent_enable_all(struct agent *agt) struct agent_event *aevent; struct lttng_ht_iter iter; - /* Flag every event as enabled. */ - rcu_read_lock(); - cds_lfht_for_each_entry (agt->events->ht, &iter.iter, aevent, node.node) { - aevent->enabled_count++; + { + /* Flag every event as enabled. */ + lttng::urcu::read_lock_guard read_lock; + + cds_lfht_for_each_entry (agt->events->ht, &iter.iter, aevent, node.node) { + aevent->enabled_count++; + } } - rcu_read_unlock(); } /* @@ -419,7 +421,7 @@ static int add_filter_app_ctx(struct lttng_bytecode *bytecode, struct agent *agt) { int ret = LTTNG_OK; - char *provider_name = NULL, *ctx_name = NULL; + char *provider_name = nullptr, *ctx_name = nullptr; struct bytecode_symbol_iterator *it = bytecode_symbol_iterator_create(bytecode); if (!it) { @@ -460,7 +462,7 @@ static int add_filter_app_ctx(struct lttng_bytecode *bytecode, free(provider_name); free(ctx_name); - provider_name = ctx_name = NULL; + provider_name = ctx_name = nullptr; } while (bytecode_symbol_iterator_next(it) == 0); end: free(provider_name); @@ -480,7 +482,7 @@ static int agent_enable(struct agent *agt, LTTNG_ASSERT(event); LTTNG_ASSERT(agt); - rcu_read_lock(); + lttng::urcu::read_lock_guard read_lock; aevent = agent_find_event( event->name, event->loglevel_type, event->loglevel, filter_expression, agt); if (!aevent) { @@ -493,8 +495,8 @@ static int agent_enable(struct agent *agt, ret = LTTNG_ERR_NOMEM; goto error; } - filter = NULL; - filter_expression = NULL; + filter = nullptr; + filter_expression = nullptr; created = 1; LTTNG_ASSERT(!AGENT_EVENT_IS_ENABLED(aevent)); } @@ -530,7 +532,6 @@ error: agent_destroy_event(aevent); } end: - rcu_read_unlock(); free(filter); free(filter_expression); return ret; @@ -576,10 +577,10 @@ int trigger_agent_enable(const struct lttng_trigger *trigger, struct agent *agt) const struct lttng_condition *condition; const struct lttng_event_rule *rule; const char *filter_expression; - char *filter_expression_copy = NULL; + char *filter_expression_copy = nullptr; const struct lttng_bytecode *filter_bytecode; - struct lttng_bytecode *filter_bytecode_copy = NULL; - struct lttng_event *event = NULL; + struct lttng_bytecode *filter_bytecode_copy = nullptr; + struct lttng_event *event = nullptr; uid_t trigger_owner_uid = 0; const char *trigger_name; @@ -648,8 +649,8 @@ int trigger_agent_enable(const struct lttng_trigger *trigger, struct agent *agt) ret = agent_enable(agt, event, filter_bytecode_copy, filter_expression_copy); /* Ownership was passed even in case of error. */ - filter_expression_copy = NULL; - filter_bytecode_copy = NULL; + filter_expression_copy = nullptr; + filter_bytecode_copy = nullptr; end: free(filter_expression_copy); @@ -664,7 +665,7 @@ end: */ const char *event_get_default_agent_ust_name(enum lttng_domain_type domain) { - const char *default_event_name = NULL; + const char *default_event_name = nullptr; switch (domain) { case LTTNG_DOMAIN_LOG4J: @@ -733,8 +734,8 @@ static int event_agent_disable_one(struct ltt_ust_session *usess, struct agent_event *aevent) { int ret; - struct ltt_ust_event *uevent = NULL; - struct ltt_ust_channel *uchan = NULL; + struct ltt_ust_event *uevent = nullptr; + struct ltt_ust_channel *uchan = nullptr; const char *ust_event_name, *ust_channel_name; LTTNG_ASSERT(agt); @@ -791,7 +792,7 @@ static int event_agent_disable_one(struct ltt_ust_session *usess, aevent->filter, LTTNG_UST_ABI_LOGLEVEL_ALL, -1, - NULL); + nullptr); /* If the agent event exists, it must be available on the UST side. */ LTTNG_ASSERT(uevent); @@ -807,7 +808,7 @@ static int event_agent_disable_one(struct ltt_ust_session *usess, * 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; + uevent->enabled = false; ret = agent_disable_event(aevent, agt->domain); if (ret != LTTNG_OK) { @@ -836,10 +837,10 @@ int trigger_agent_disable(const struct lttng_trigger *trigger, struct agent *agt DBG("Event agent disabling for trigger %" PRIu64, lttng_trigger_get_tracer_token(trigger)); - rcu_read_lock(); + lttng::urcu::read_lock_guard read_lock; aevent = agent_find_event_by_trigger(trigger, agt); - if (aevent == NULL) { + if (aevent == nullptr) { DBG2("Event agent NOT found by trigger %" PRIu64, lttng_trigger_get_tracer_token(trigger)); ret = LTTNG_ERR_UST_EVENT_NOT_FOUND; @@ -853,7 +854,6 @@ int trigger_agent_disable(const struct lttng_trigger *trigger, struct agent *agt } end: - rcu_read_unlock(); return ret; } @@ -875,11 +875,11 @@ int event_agent_disable(struct ltt_ust_session *usess, struct agent *agt, const DBG("Event agent disabling %s (all loglevels) for session %" PRIu64, event_name, usess->id); - rcu_read_lock(); + lttng::urcu::read_lock_guard read_lock; agent_find_events_by_name(event_name, agt, &iter); node = lttng_ht_iter_get_node_str(&iter); - if (node == NULL) { + if (node == nullptr) { DBG2("Event agent NOT found by name %s", event_name); ret = LTTNG_ERR_UST_EVENT_NOT_FOUND; goto end; @@ -898,7 +898,6 @@ int event_agent_disable(struct ltt_ust_session *usess, struct agent *agt, const node = lttng_ht_iter_get_node_str(&iter); } while (node); end: - rcu_read_unlock(); return ret; } /* @@ -925,21 +924,24 @@ int event_agent_disable_all(struct ltt_ust_session *usess, struct agent *agt) } /* Disable every event. */ - rcu_read_lock(); - cds_lfht_for_each_entry (agt->events->ht, &iter.iter, aevent, node.node) { - if (!AGENT_EVENT_IS_ENABLED(aevent)) { - continue; - } + { + lttng::urcu::read_lock_guard read_lock; - ret = event_agent_disable(usess, agt, aevent->name); - if (ret != LTTNG_OK) { - goto error_unlock; + cds_lfht_for_each_entry (agt->events->ht, &iter.iter, aevent, node.node) { + if (!AGENT_EVENT_IS_ENABLED(aevent)) { + continue; + } + + ret = event_agent_disable(usess, agt, aevent->name); + if (ret != LTTNG_OK) { + goto error_unlock; + } } } + ret = LTTNG_OK; error_unlock: - rcu_read_unlock(); error: return ret; }