X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fevent.cpp;fp=src%2Fbin%2Flttng-sessiond%2Fevent.cpp;h=367c4944553c56ad15f53b26830b1deee16c9535;hp=3976f0fcee2eb5f230cbe02e61069276b96dedd8;hb=56047f5a23df5c2c583a102b8015bbec5a7da9f1;hpb=66cefebdc240cbae0bc79594305f509b0779fa98 diff --git a/src/bin/lttng-sessiond/event.cpp b/src/bin/lttng-sessiond/event.cpp index 3976f0fce..367c49445 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 @@ -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, @@ -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 @@ -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,18 @@ 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) { - 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 +360,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 +369,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 +483,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 +533,6 @@ error: agent_destroy_event(aevent); } end: - rcu_read_unlock(); free(filter); free(filter_expression); return ret; @@ -836,7 +838,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 +855,6 @@ int trigger_agent_disable(const struct lttng_trigger *trigger, struct agent *agt } end: - rcu_read_unlock(); return ret; } @@ -875,7 +876,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 +899,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 +925,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; }