Use compiler-agnostic defines to silence warning
[lttng-tools.git] / src / bin / lttng-sessiond / event.cpp
index 4e52dfa9d5145882f48635cb399cf4aafff8ca78..0371b27b543a80a3e84cb4dbdacd3e2d7db91c9f 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>
@@ -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();
+       const 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();
+       const lttng::urcu::read_lock_guard read_lock;
 
        /*
         * We use a custom lookup since we need the iterator for the next_duplicate
@@ -274,8 +274,8 @@ int event_ust_disable_tracepoint(struct ltt_ust_session *usess,
                        trace_ust_ht_match_event_by_name,
                        event_name,
                        &iter.iter);
-       node = lttng_ht_iter_get_node_str(&iter);
-       if (node == NULL) {
+       node = lttng_ht_iter_get_node<lttng_ht_node_str>(&iter);
+       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, &ltt_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) {
@@ -304,13 +304,12 @@ int event_ust_disable_tracepoint(struct ltt_ust_session *usess,
                /* Get next duplicate event by name. */
                cds_lfht_next_duplicate(
                        ht->ht, trace_ust_ht_match_event_by_name, event_name, &iter.iter);
-               node = lttng_ht_iter_get_node_str(&iter);
+               node = lttng_ht_iter_get_node<lttng_ht_node_str>(&iter);
        } while (node);
 
        ret = LTTNG_OK;
 
 error:
-       rcu_read_unlock();
        return ret;
 }
 
@@ -320,18 +319,17 @@ error:
 int event_ust_disable_all_tracepoints(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan)
 {
        int ret, i, size, error = 0;
-       struct lttng_ht_iter iter;
-       struct ltt_ust_event *uevent = NULL;
-       struct lttng_event *events = NULL;
+       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) {
+       for (auto *uevent :
+            lttng::urcu::lfht_iteration_adapter<ltt_ust_event,
+                                                decltype(ltt_ust_event::node),
+                                                &ltt_ust_event::node>(*uchan->events->ht)) {
+               if (uevent->enabled) {
                        ret = event_ust_disable_tracepoint(usess, uchan, uevent->attr.name);
                        if (ret < 0) {
                                error = LTTNG_ERR_UST_DISABLE_FAIL;
@@ -358,22 +356,18 @@ 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;
 }
 
 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) {
+       for (auto *aevent :
+            lttng::urcu::lfht_iteration_adapter<agent_event,
+                                                decltype(agent_event::node),
+                                                &agent_event::node>(*agt->events->ht)) {
                aevent->enabled_count++;
        }
-       rcu_read_unlock();
 }
 
 /*
@@ -419,7 +413,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 +454,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 +474,7 @@ static int agent_enable(struct agent *agt,
        LTTNG_ASSERT(event);
        LTTNG_ASSERT(agt);
 
-       rcu_read_lock();
+       const 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 +487,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 +524,6 @@ error:
                agent_destroy_event(aevent);
        }
 end:
-       rcu_read_unlock();
        free(filter);
        free(filter_expression);
        return ret;
@@ -576,10 +569,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;
 
@@ -605,6 +598,7 @@ int trigger_agent_enable(const struct lttng_trigger *trigger, struct agent *agt)
        switch (lttng_event_rule_get_type(rule)) {
        case LTTNG_EVENT_RULE_TYPE_JUL_LOGGING:
        case LTTNG_EVENT_RULE_TYPE_LOG4J_LOGGING:
+       case LTTNG_EVENT_RULE_TYPE_LOG4J2_LOGGING:
        case LTTNG_EVENT_RULE_TYPE_PYTHON_LOGGING:
                break;
        default:
@@ -648,8 +642,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,12 +658,15 @@ 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:
                default_event_name = DEFAULT_LOG4J_EVENT_NAME;
                break;
+       case LTTNG_DOMAIN_LOG4J2:
+               default_event_name = DEFAULT_LOG4J2_EVENT_NAME;
+               break;
        case LTTNG_DOMAIN_JUL:
                default_event_name = DEFAULT_JUL_EVENT_NAME;
                break;
@@ -733,8 +730,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);
@@ -756,6 +753,8 @@ static int event_agent_disable_one(struct ltt_ust_session *usess,
                ust_channel_name = DEFAULT_JUL_CHANNEL_NAME;
        } else if (agt->domain == LTTNG_DOMAIN_LOG4J) {
                ust_channel_name = DEFAULT_LOG4J_CHANNEL_NAME;
+       } else if (agt->domain == LTTNG_DOMAIN_LOG4J2) {
+               ust_channel_name = DEFAULT_LOG4J2_CHANNEL_NAME;
        } else if (agt->domain == LTTNG_DOMAIN_PYTHON) {
                ust_channel_name = DEFAULT_PYTHON_CHANNEL_NAME;
        } else {
@@ -791,7 +790,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 +806,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 +835,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();
+       const 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 +852,6 @@ int trigger_agent_disable(const struct lttng_trigger *trigger, struct agent *agt
        }
 
 end:
-       rcu_read_unlock();
        return ret;
 }
 
@@ -875,11 +873,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();
+       const lttng::urcu::read_lock_guard read_lock;
        agent_find_events_by_name(event_name, agt, &iter);
-       node = lttng_ht_iter_get_node_str(&iter);
+       node = lttng_ht_iter_get_node<lttng_ht_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;
@@ -895,10 +893,9 @@ int event_agent_disable(struct ltt_ust_session *usess, struct agent *agt, const
 
                /* Get next duplicate agent event by name. */
                agent_event_next_duplicate(event_name, agt, &iter);
-               node = lttng_ht_iter_get_node_str(&iter);
+               node = lttng_ht_iter_get_node<lttng_ht_node_str>(&iter);
        } while (node);
 end:
-       rcu_read_unlock();
        return ret;
 }
 /*
@@ -909,8 +906,6 @@ end:
 int event_agent_disable_all(struct ltt_ust_session *usess, struct agent *agt)
 {
        int ret;
-       struct agent_event *aevent;
-       struct lttng_ht_iter iter;
 
        LTTNG_ASSERT(agt);
        LTTNG_ASSERT(usess);
@@ -925,8 +920,10 @@ 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) {
+       for (auto *aevent :
+            lttng::urcu::lfht_iteration_adapter<agent_event,
+                                                decltype(agent_event::node),
+                                                &agent_event::node>(*agt->events->ht)) {
                if (!AGENT_EVENT_IS_ENABLED(aevent)) {
                        continue;
                }
@@ -936,10 +933,10 @@ int event_agent_disable_all(struct ltt_ust_session *usess, struct agent *agt)
                        goto error_unlock;
                }
        }
+
        ret = LTTNG_OK;
 
 error_unlock:
-       rcu_read_unlock();
 error:
        return ret;
 }
This page took 0.030648 seconds and 4 git commands to generate.