X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbin%2Flttng-sessiond%2Faction-executor.cpp;h=3fbb87f431858b6232b412cfed2ea292e6305214;hb=13d03b1e7e910dc0197275764efb6caeed6642aa;hp=4c1e748df4d1c2078b626bb704707fba583bc697;hpb=cd9adb8b829564212158943a0d279bb35322ab30;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/action-executor.cpp b/src/bin/lttng-sessiond/action-executor.cpp index 4c1e748df..3fbb87f43 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; @@ -991,16 +992,9 @@ static int add_action_to_subitem_array(struct lttng_action *action, LTTNG_ASSERT(subitems); if (type == LTTNG_ACTION_TYPE_LIST) { - unsigned int count, i; - - status = lttng_action_list_get_count(action, &count); - LTTNG_ASSERT(status == LTTNG_ACTION_STATUS_OK); - - for (i = 0; i < count; i++) { - struct lttng_action *inner_action = nullptr; - - inner_action = lttng_action_list_borrow_mutable_at_index(action, i); + for (auto inner_action : lttng::ctl::action_list_view(action)) { LTTNG_ASSERT(inner_action); + ret = add_action_to_subitem_array(inner_action, subitems); if (ret) { goto end;