X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbin%2Flttng-sessiond%2Fnotification-thread-commands.hpp;h=8a3150ae32d72987b5c46a20b9096188649e97a1;hb=e8c353ad12851366573d9bfe45d333a9e9ff742d;hp=98b0abcee66942caed4cfbd5cb60c24016a3beb9;hpb=c9e313bc594f40a86eed237dce222c0fc99c957f;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/notification-thread-commands.hpp b/src/bin/lttng-sessiond/notification-thread-commands.hpp index 98b0abcee..8a3150ae3 100644 --- a/src/bin/lttng-sessiond/notification-thread-commands.hpp +++ b/src/bin/lttng-sessiond/notification-thread-commands.hpp @@ -8,14 +8,19 @@ #ifndef NOTIFICATION_THREAD_COMMANDS_H #define NOTIFICATION_THREAD_COMMANDS_H -#include -#include -#include -#include "notification-thread.hpp" -#include "notification-thread-internal.hpp" #include "notification-thread-events.hpp" +#include "notification-thread-internal.hpp" +#include "notification-thread.hpp" + #include + +#include +#include + +#include + #include +#include 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 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 */