Replace explicit rcu_read_lock/unlock with lttng::urcu::read_lock_guard
[lttng-tools.git] / src / bin / lttng-sessiond / event.cpp
index 3976f0fcee2eb5f230cbe02e61069276b96dedd8..367c4944553c56ad15f53b26830b1deee16c9535 100644 (file)
@@ -25,6 +25,7 @@
 #include <common/error.hpp>
 #include <common/filter.hpp>
 #include <common/sessiond-comm/sessiond-comm.hpp>
+#include <common/urcu.hpp>
 
 #include <lttng/condition/condition.h>
 #include <lttng/condition/event-rule-matches.h>
@@ -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;
 }
This page took 0.026115 seconds and 4 git commands to generate.