#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>
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;
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,
goto end;
}
- uevent->enabled = 1;
+ uevent->enabled = true;
if (to_create) {
/* Add ltt ust event to channel */
add_unique_ust_event(uchan->events, uevent);
ret = LTTNG_OK;
end:
- rcu_read_unlock();
free(filter_expression);
free(filter);
free(exclusion);
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
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);
if (node == nullptr) {
DBG2("Trace UST event NOT found by name %s", event_name);
ret = LTTNG_ERR_UST_EVENT_NOT_FOUND;
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) {
/* 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;
}
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 = 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) {
+ for (auto *uevent :
+ lttng::urcu::lfht_iteration_adapter<ltt_ust_event,
+ decltype(ltt_ust_event::node),
+ <t_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;
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();
}
/*
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) {
agent_destroy_event(aevent);
}
end:
- rcu_read_unlock();
free(filter);
free(filter_expression);
return ret;
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:
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;
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 {
* 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) {
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 == nullptr) {
}
end:
- rcu_read_unlock();
return ret;
}
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 == nullptr) {
DBG2("Event agent NOT found by name %s", event_name);
/* 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;
}
/*
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);
}
/* 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;
}
goto error_unlock;
}
}
+
ret = LTTNG_OK;
error_unlock:
- rcu_read_unlock();
error:
return ret;
}