X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Faction-executor.cpp;fp=src%2Fbin%2Flttng-sessiond%2Faction-executor.cpp;h=31683547b1340260579fa4016c29b6130b2080f5;hp=4c1e748df4d1c2078b626bb704707fba583bc697;hb=56047f5a23df5c2c583a102b8015bbec5a7da9f1;hpb=66cefebdc240cbae0bc79594305f509b0779fa98 diff --git a/src/bin/lttng-sessiond/action-executor.cpp b/src/bin/lttng-sessiond/action-executor.cpp index 4c1e748df..31683547b 100644 --- a/src/bin/lttng-sessiond/action-executor.cpp +++ b/src/bin/lttng-sessiond/action-executor.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -290,6 +291,8 @@ static int action_executor_start_session_handler(struct action_executor *executo enum lttng_error_code cmd_ret; struct lttng_action *action = item->action; + lttng::urcu::read_lock_guard read_lock; + action_status = lttng_action_start_session_get_session_name(action, &session_name); if (action_status != LTTNG_ACTION_STATUS_OK) { ERR("Failed to get session name from `%s` action", get_action_name(action)); @@ -311,7 +314,6 @@ static int action_executor_start_session_handler(struct action_executor *executo } session_lock_list(); - rcu_read_lock(); session = session_find_by_id(LTTNG_OPTIONAL_GET(item->context.session_id)); if (!session) { DBG("Failed to find session `%s` by name while executing `%s` action of trigger `%s`", @@ -362,7 +364,6 @@ error_unlock_session: session_unlock(session); session_put(session); error_unlock_list: - rcu_read_unlock(); session_unlock_list(); end: return ret; @@ -380,6 +381,8 @@ static int action_executor_stop_session_handler(struct action_executor *executor enum lttng_error_code cmd_ret; struct lttng_action *action = item->action; + lttng::urcu::read_lock_guard read_lock; + action_status = lttng_action_stop_session_get_session_name(action, &session_name); if (action_status != LTTNG_ACTION_STATUS_OK) { ERR("Failed to get session name from `%s` action", get_action_name(action)); @@ -401,7 +404,6 @@ static int action_executor_stop_session_handler(struct action_executor *executor } session_lock_list(); - rcu_read_lock(); session = session_find_by_id(LTTNG_OPTIONAL_GET(item->context.session_id)); if (!session) { DBG("Failed to find session `%s` by name while executing `%s` action of trigger `%s`", @@ -452,7 +454,6 @@ error_unlock_session: session_unlock(session); session_put(session); error_unlock_list: - rcu_read_unlock(); session_unlock_list(); end: return ret; @@ -470,6 +471,8 @@ static int action_executor_rotate_session_handler(struct action_executor *execut enum lttng_error_code cmd_ret; struct lttng_action *action = item->action; + lttng::urcu::read_lock_guard read_lock; + action_status = lttng_action_rotate_session_get_session_name(action, &session_name); if (action_status != LTTNG_ACTION_STATUS_OK) { ERR("Failed to get session name from `%s` action", get_action_name(action)); @@ -491,7 +494,6 @@ static int action_executor_rotate_session_handler(struct action_executor *execut } session_lock_list(); - rcu_read_lock(); session = session_find_by_id(LTTNG_OPTIONAL_GET(item->context.session_id)); if (!session) { DBG("Failed to find session `%s` by name while executing `%s` action of trigger `%s`", @@ -550,7 +552,6 @@ error_unlock_session: session_unlock(session); session_put(session); error_unlock_list: - rcu_read_unlock(); session_unlock_list(); end: return ret; @@ -572,6 +573,8 @@ static int action_executor_snapshot_session_handler(struct action_executor *exec default_snapshot_output.max_size = UINT64_MAX; + lttng::urcu::read_lock_guard read_lock; + /* * Validate if, at the moment the action was queued, the target session * existed. If not, skip the action altogether. @@ -599,7 +602,6 @@ static int action_executor_snapshot_session_handler(struct action_executor *exec } session_lock_list(); - rcu_read_lock(); session = session_find_by_id(LTTNG_OPTIONAL_GET(item->context.session_id)); if (!session) { DBG("Failed to find session `%s` by name while executing `%s` action of trigger `%s`", @@ -645,7 +647,6 @@ error_unlock_session: session_unlock(session); session_put(session); error_unlock_list: - rcu_read_unlock(); session_unlock_list(); end: return ret;