X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fevent.cpp;h=462ed2f0db588fdd1ad37debd9bf6d2609ef079c;hb=HEAD;hp=e81fa9417c4333198c6ddf0af507b91bff7905ee;hpb=5c7248cd5bce45bf64d563fb4e130a63bf345f11;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/event.cpp b/src/bin/lttng-sessiond/event.cpp index e81fa9417..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 @@ -128,7 +129,7 @@ int event_kernel_enable_event(struct ltt_kernel_channel *kchan, 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, @@ -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 @@ -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; } @@ -327,15 +326,17 @@ int event_ust_disable_all_tracepoints(struct ltt_ust_session *usess, struct ltt_ 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(); } /* @@ -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) { @@ -530,7 +532,6 @@ error: agent_destroy_event(aevent); } end: - rcu_read_unlock(); free(filter); free(filter_expression); return ret; @@ -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,7 +837,7 @@ 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 == nullptr) { @@ -853,7 +854,6 @@ int trigger_agent_disable(const struct lttng_trigger *trigger, struct agent *agt } end: - rcu_read_unlock(); return ret; } @@ -875,7 +875,7 @@ 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); @@ -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; }