Fix: sessiond: sessiond and agent deadlock on destroy
[lttng-tools.git] / src / bin / lttng-sessiond / session.h
index 0750e1bcd83427cdd7cce518a2935d80759b0ab2..0144ca6ff9bd9fdd5510f7e940aa2b184a97cbe8 100644 (file)
@@ -75,7 +75,10 @@ struct ltt_session_list {
 struct ltt_session {
        char name[NAME_MAX];
        bool has_auto_generated_name;
+       bool name_contains_creation_time;
        char hostname[HOST_NAME_MAX]; /* Local hostname. */
+       /* Path of the last closed chunk. */
+       char last_chunk_path[LTTNG_PATH_MAX];
        time_t creation_time;
        struct ltt_kernel_session *kernel_session;
        struct ltt_ust_session *ust_session;
@@ -180,18 +183,30 @@ struct ltt_session {
        struct lttng_trace_chunk *chunk_being_archived;
        /* Current state of a rotation. */
        enum lttng_rotation_state rotation_state;
+       bool quiet_rotation;
        char *last_archived_chunk_name;
        LTTNG_OPTIONAL(uint64_t) last_archived_chunk_id;
        struct lttng_dynamic_array destroy_notifiers;
+       /* Session base path override. Set non-null. */
+       char *base_path;
 };
 
-/* Prototypes */
 enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
                struct ltt_session **out_session);
 void session_lock(struct ltt_session *session);
+void session_unlock(struct ltt_session *session);
+
+/*
+ * The session list lock covers more ground than its name implies. While
+ * it does protect against concurent mutations of the session list, it is
+ * also used as a multi-session lock when synchronizing newly-registered
+ * 'user space tracer' and 'agent' applications.
+ *
+ * In other words, it prevents session configurations from changing while they
+ * are being transmitted to the various applications.
+ */
 void session_lock_list(void);
 int session_trylock_list(void);
-void session_unlock(struct ltt_session *session);
 void session_unlock_list(void);
 
 void session_destroy(struct ltt_session *session);
@@ -224,7 +239,8 @@ int session_reset_rotation_state(struct ltt_session *session,
 
 /* Create a new trace chunk object from the session's configuration. */
 struct lttng_trace_chunk *session_create_new_trace_chunk(
-               struct ltt_session *session,
+               const struct ltt_session *session,
+               const struct consumer_output *consumer_output_override,
                const char *session_base_path_override,
                const char *chunk_name_override);
 
@@ -246,6 +262,9 @@ int session_set_trace_chunk(struct ltt_session *session,
  */
 int session_close_trace_chunk(const struct ltt_session *session,
                struct lttng_trace_chunk *trace_chunk,
-               const enum lttng_trace_chunk_command_type *close_command);
+               const enum lttng_trace_chunk_command_type *close_command,
+               char *path);
+
+bool session_output_supports_trace_chunks(const struct ltt_session *session);
 
 #endif /* _LTT_SESSION_H */
This page took 0.024293 seconds and 4 git commands to generate.