fix: relayd: unaligned access in trace_chunk_registry_ht_key_hash
[lttng-tools.git] / src / bin / lttng-sessiond / notification-thread-commands.hpp
index 98b0abcee66942caed4cfbd5cb60c24016a3beb9..8a3150ae32d72987b5c46a20b9096188649e97a1 100644 (file)
@@ -8,14 +8,19 @@
 #ifndef NOTIFICATION_THREAD_COMMANDS_H
 #define NOTIFICATION_THREAD_COMMANDS_H
 
-#include <lttng/domain.h>
-#include <lttng/lttng-error.h>
-#include <urcu/rculfhash.h>
-#include "notification-thread.hpp"
-#include "notification-thread-internal.hpp"
 #include "notification-thread-events.hpp"
+#include "notification-thread-internal.hpp"
+#include "notification-thread.hpp"
+
 #include <common/waiter.hpp>
+
+#include <lttng/domain.h>
+#include <lttng/lttng-error.h>
+
+#include <vendor/optional.hpp>
+
 #include <stdbool.h>
+#include <urcu/rculfhash.h>
 
 struct notification_thread_data;
 struct lttng_trigger;
@@ -25,6 +30,8 @@ enum notification_thread_command_type {
        NOTIFICATION_COMMAND_TYPE_UNREGISTER_TRIGGER,
        NOTIFICATION_COMMAND_TYPE_ADD_CHANNEL,
        NOTIFICATION_COMMAND_TYPE_REMOVE_CHANNEL,
+       NOTIFICATION_COMMAND_TYPE_ADD_SESSION,
+       NOTIFICATION_COMMAND_TYPE_REMOVE_SESSION,
        NOTIFICATION_COMMAND_TYPE_SESSION_ROTATION_ONGOING,
        NOTIFICATION_COMMAND_TYPE_SESSION_ROTATION_COMPLETED,
        NOTIFICATION_COMMAND_TYPE_ADD_TRACER_EVENT_SOURCE,
@@ -36,9 +43,9 @@ enum notification_thread_command_type {
 };
 
 struct notification_thread_command {
-       struct cds_list_head cmd_list_node;
+       struct cds_list_head cmd_list_node = {};
 
-       enum notification_thread_command_type type;
+       notification_thread_command_type type = NOTIFICATION_COMMAND_TYPE_QUIT;
        union {
                /* Register trigger. */
                struct {
@@ -49,12 +56,21 @@ struct notification_thread_command {
                struct {
                        const struct lttng_trigger *trigger;
                } unregister_trigger;
+               /* Add session. */
+               struct {
+                       uint64_t session_id;
+                       const char *session_name;
+                       uid_t session_uid;
+                       gid_t session_gid;
+               } add_session;
+               /* Remove session. */
+               struct {
+                       uint64_t session_id;
+               } remove_session;
                /* Add channel. */
                struct {
                        struct {
-                               const char *name;
-                               uid_t uid;
-                               gid_t gid;
+                               uint64_t id;
                        } session;
                        struct {
                                const char *name;
@@ -69,9 +85,7 @@ struct notification_thread_command {
                        enum lttng_domain_type domain;
                } remove_channel;
                struct {
-                       const char *session_name;
-                       uid_t uid;
-                       gid_t gid;
+                       uint64_t session_id;
                        uint64_t trace_archive_chunk_id;
                        /* Weak reference. */
                        struct lttng_trace_archive_location *location;
@@ -96,7 +110,7 @@ struct notification_thread_command {
                        const struct lttng_trigger *trigger;
                } get_trigger;
 
-       } parameters;
+       } parameters = {};
 
        union {
                struct {
@@ -105,43 +119,56 @@ struct notification_thread_command {
                struct {
                        struct lttng_trigger *trigger;
                } get_trigger;
-       } reply;
-       /* lttng_waiter on which to wait for command reply (optional). */
-       struct lttng_waiter reply_waiter;
-       enum lttng_error_code reply_code;
-       bool is_async;
-};
-
-enum lttng_error_code notification_thread_command_register_trigger(
-               struct notification_thread_handle *handle,
-               struct lttng_trigger *trigger,
-               bool is_anonymous_trigger);
+       } reply = {};
 
-enum lttng_error_code notification_thread_command_unregister_trigger(
-               struct notification_thread_handle *handle,
-               const struct lttng_trigger *trigger);
+       /* Used to wake origin thread for synchroneous commands. */
+       nonstd::optional<lttng::synchro::waker> command_completed_waker = nonstd::nullopt;
+       lttng_error_code reply_code = LTTNG_ERR_UNK;
+       bool is_async = false;
+};
 
-enum lttng_error_code notification_thread_command_add_channel(
-               struct notification_thread_handle *handle,
-               char *session_name, uid_t session_uid, gid_t session_gid,
-               char *channel_name, uint64_t key,
-               enum lttng_domain_type domain, uint64_t capacity);
+enum lttng_error_code
+notification_thread_command_register_trigger(struct notification_thread_handle *handle,
+                                            struct lttng_trigger *trigger,
+                                            bool is_anonymous_trigger);
+
+enum lttng_error_code
+notification_thread_command_unregister_trigger(struct notification_thread_handle *handle,
+                                              const struct lttng_trigger *trigger);
+
+enum lttng_error_code
+notification_thread_command_add_session(struct notification_thread_handle *handle,
+                                       uint64_t session_id,
+                                       const char *session_name,
+                                       uid_t session_uid,
+                                       gid_t session_gid);
+
+enum lttng_error_code
+notification_thread_command_remove_session(struct notification_thread_handle *handle,
+                                          uint64_t session_id);
+
+enum lttng_error_code
+notification_thread_command_add_channel(struct notification_thread_handle *handle,
+                                       uint64_t session_id,
+                                       char *channel_name,
+                                       uint64_t key,
+                                       enum lttng_domain_type domain,
+                                       uint64_t capacity);
 
 enum lttng_error_code notification_thread_command_remove_channel(
-               struct notification_thread_handle *handle,
-               uint64_t key, enum lttng_domain_type domain);
+       struct notification_thread_handle *handle, uint64_t key, enum lttng_domain_type domain);
 
-enum lttng_error_code notification_thread_command_session_rotation_ongoing(
-               struct notification_thread_handle *handle,
-               const char *session_name, uid_t session_uid, gid_t session_gid,
-               uint64_t trace_archive_chunk_id);
+enum lttng_error_code
+notification_thread_command_session_rotation_ongoing(struct notification_thread_handle *handle,
+                                                    uint64_t session_id,
+                                                    uint64_t trace_archive_chunk_id);
 
 /* Ownership of location is transferred. */
 enum lttng_error_code notification_thread_command_session_rotation_completed(
-               struct notification_thread_handle *handle,
-               const char *session_name, uid_t session_uid, gid_t session_gid,
-               uint64_t trace_archive_chunk_id,
-               struct lttng_trace_archive_location *location);
+       struct notification_thread_handle *handle,
+       uint64_t session_id,
+       uint64_t trace_archive_chunk_id,
+       struct lttng_trace_archive_location *location);
 
 /*
  * Return the set of triggers visible to a given client.
@@ -156,30 +183,29 @@ enum lttng_error_code notification_thread_command_session_rotation_completed(
  *
  * The caller has the exclusive ownership of the returned trigger set.
  */
-enum lttng_error_code notification_thread_command_list_triggers(
-               struct notification_thread_handle *handle,
-               uid_t client_uid,
-               struct lttng_triggers **triggers);
+enum lttng_error_code
+notification_thread_command_list_triggers(struct notification_thread_handle *handle,
+                                         uid_t client_uid,
+                                         struct lttng_triggers **triggers);
 
 /*
  * The ownership of trigger_event_application_pipe is _not_ transferred to
  * the notification thread.
  */
-enum lttng_error_code notification_thread_command_add_tracer_event_source(
-               struct notification_thread_handle *handle,
-               int tracer_event_source_fd,
-               enum lttng_domain_type domain);
-
-enum lttng_error_code notification_thread_command_remove_tracer_event_source(
-               struct notification_thread_handle *handle,
-               int tracer_event_source_fd);
-
-void notification_thread_command_quit(
-               struct notification_thread_handle *handle);
-
-enum lttng_error_code notification_thread_command_get_trigger(
-               struct notification_thread_handle *handle,
-               const struct lttng_trigger *trigger,
-               struct lttng_trigger **real_trigger);
+enum lttng_error_code
+notification_thread_command_add_tracer_event_source(struct notification_thread_handle *handle,
+                                                   int tracer_event_source_fd,
+                                                   enum lttng_domain_type domain);
+
+enum lttng_error_code
+notification_thread_command_remove_tracer_event_source(struct notification_thread_handle *handle,
+                                                      int tracer_event_source_fd);
+
+void notification_thread_command_quit(struct notification_thread_handle *handle);
+
+enum lttng_error_code
+notification_thread_command_get_trigger(struct notification_thread_handle *handle,
+                                       const struct lttng_trigger *trigger,
+                                       struct lttng_trigger **real_trigger);
 
 #endif /* NOTIFICATION_THREAD_COMMANDS_H */
This page took 0.026417 seconds and 4 git commands to generate.