SoW-2020-0003: Trace Hit Counters
[lttng-tools.git] / src / bin / lttng-sessiond / action-executor.c
index 27f0e472305b6a7a3eb5cafbb50fe8057d0392b5..4e6de8907066ecd97aa3472c0cf7174e81ede584 100644 (file)
 #include <common/optional.h>
 #include <lttng/action/action-internal.h>
 #include <lttng/action/group.h>
+#include <lttng/action/notify-internal.h>
 #include <lttng/action/notify.h>
 #include <lttng/action/rotate-session.h>
 #include <lttng/action/snapshot-session.h>
 #include <lttng/action/start-session.h>
 #include <lttng/action/stop-session.h>
 #include <lttng/condition/evaluation.h>
-#include <lttng/condition/event-rule-internal.h>
+#include <lttng/condition/on-event-internal.h>
 #include <lttng/lttng-error.h>
 #include <lttng/trigger/trigger-internal.h>
 #include <pthread.h>
@@ -66,6 +67,9 @@ typedef int (*action_executor_handler)(struct action_executor *executor,
 static int action_executor_notify_handler(struct action_executor *executor,
                const struct action_work_item *,
                const struct lttng_action *);
+static int action_executor_incr_value_handler(struct action_executor *executor,
+               const struct action_work_item *,
+               const struct lttng_action *);
 static int action_executor_start_session_handler(struct action_executor *executor,
                const struct action_work_item *,
                const struct lttng_action *);
@@ -87,6 +91,7 @@ static int action_executor_generic_handler(struct action_executor *executor,
 
 static const action_executor_handler action_executors[] = {
        [LTTNG_ACTION_TYPE_NOTIFY] = action_executor_notify_handler,
+       [LTTNG_ACTION_TYPE_INCREMENT_VALUE] = action_executor_incr_value_handler,
        [LTTNG_ACTION_TYPE_START_SESSION] = action_executor_start_session_handler,
        [LTTNG_ACTION_TYPE_STOP_SESSION] = action_executor_stop_session_handler,
        [LTTNG_ACTION_TYPE_ROTATE_SESSION] = action_executor_rotate_session_handler,
@@ -94,14 +99,6 @@ static const action_executor_handler action_executors[] = {
        [LTTNG_ACTION_TYPE_GROUP] = action_executor_group_handler,
 };
 
-static const char *action_type_names[] = {
-       [LTTNG_ACTION_TYPE_NOTIFY] = "Notify",
-       [LTTNG_ACTION_TYPE_START_SESSION] = "Start session",
-       [LTTNG_ACTION_TYPE_STOP_SESSION] = "Stop session",
-       [LTTNG_ACTION_TYPE_ROTATE_SESSION] = "Rotate session",
-       [LTTNG_ACTION_TYPE_SNAPSHOT_SESSION] = "Snapshot session",
-       [LTTNG_ACTION_TYPE_GROUP] = "Group",
-};
 
 static const char *get_action_name(const struct lttng_action *action)
 {
@@ -109,7 +106,7 @@ static const char *get_action_name(const struct lttng_action *action)
 
        assert(action_type != LTTNG_ACTION_TYPE_UNKNOWN);
 
-       return action_type_names[action_type];
+       return lttng_action_type_string(action_type);
 }
 
 /* Check if this trigger allowed to interect with a given session. */
@@ -205,6 +202,14 @@ static int action_executor_notify_handler(struct action_executor *executor,
                        client_handle_transmission_status, executor);
 }
 
+static int action_executor_incr_value_handler(struct action_executor *executor,
+               const struct action_work_item *work_item,
+               const struct lttng_action *action)
+{
+       /* This action is executed by the tracer. */
+       return 0;
+}
+
 static int action_executor_start_session_handler(struct action_executor *executor,
                const struct action_work_item *work_item,
                const struct lttng_action *action)
@@ -237,7 +242,6 @@ static int action_executor_start_session_handler(struct action_executor *executo
        if (!is_trigger_allowed_for_session(work_item->trigger, session)) {
                goto error_dispose_session;
        }
-
        cmd_ret = cmd_start_trace(session);
        switch (cmd_ret) {
        case LTTNG_OK:
@@ -425,9 +429,9 @@ static int action_executor_snapshot_session_handler(struct action_executor *exec
        session_lock_list();
        session = session_find_by_name(session_name);
        if (!session) {
-               DBG("Failed to find session `%s` by name while executing `%s` action of trigger `%p`",
+               DBG("Failed to find session `%s` by name while executing `%s` action of trigger `%s`",
                                session_name, get_action_name(action),
-                   work_item->trigger);
+                               get_trigger_name(work_item->trigger));
                goto error_unlock_list;
        }
 
@@ -501,7 +505,7 @@ static int action_executor_generic_handler(struct action_executor *executor,
 
        assert(action_type != LTTNG_ACTION_TYPE_UNKNOWN);
 
-       DBG("Executing action `%s` of trigger `%p` action work item %" PRIu64,
+       DBG("Executing action `%s` of trigger `%s` action work item %" PRIu64,
                        get_action_name(action),
                        get_trigger_name(work_item->trigger),
                        work_item->id);
@@ -601,8 +605,10 @@ static bool shutdown_action_executor_thread(void *_data)
 {
        struct action_executor *executor = _data;
 
+       pthread_mutex_lock(&executor->work.lock);
        executor->should_quit = true;
        pthread_cond_signal(&executor->work.cond);
+       pthread_mutex_unlock(&executor->work.lock);
        return true;
 }
 
@@ -690,7 +696,7 @@ enum action_executor_status action_executor_enqueue(
 
        work_item = zmalloc(sizeof(*work_item));
        if (!work_item) {
-               PERROR("Failed to allocate action executor work item on behalf of trigger `%p`",
+               PERROR("Failed to allocate action executor work item on behalf of trigger `%s`",
                                get_trigger_name(trigger));
                executor_status = ACTION_EXECUTOR_STATUS_ERROR;
                goto error_unlock;
@@ -721,15 +727,15 @@ enum action_executor_status action_executor_enqueue(
        evaluation = NULL;
        cds_list_add_tail(&work_item->list_node, &executor->work.list);
        executor->work.pending_count++;
-       DBG("Enqueued action for trigger `%p` as work item %" PRIu64,
+       DBG("Enqueued action for trigger `%s` as work item #%" PRIu64,
                        get_trigger_name(trigger), work_item_id);
        signal = true;
 
 error_unlock:
-       pthread_mutex_unlock(&executor->work.lock);
        if (signal) {
                pthread_cond_signal(&executor->work.cond);
        }
+       pthread_mutex_unlock(&executor->work.lock);
 
        lttng_evaluation_destroy(evaluation);
        return executor_status;
This page took 0.027231 seconds and 5 git commands to generate.