sessiond: add clear notifier
[lttng-tools.git] / src / bin / lttng-sessiond / session.h
index 31a40a741aee1797a20b61f345ca96d7a62181a2..da3805658cd28e1255292d6250ae6882f779a6d0 100644 (file)
@@ -36,6 +36,8 @@ struct ltt_ust_session;
 
 typedef void (*ltt_session_destroy_notifier)(const struct ltt_session *session,
                void *user_data);
+typedef void (*ltt_session_clear_notifier)(const struct ltt_session *session,
+               void *user_data);
 
 /*
  * Tracing session list
@@ -173,6 +175,12 @@ struct ltt_session {
         * chunk.
         */
        bool rotated_after_last_stop;
+       /*
+        * Track whether the session was cleared after last stop. All subsequent
+        * clear (without prior start) will succeed, but will be effect-less. A
+        * subsequent rotate (without prior start) will return an error.
+        */
+       bool cleared_after_last_stop;
        /*
         * Condition and trigger for size-based rotations.
         */
@@ -187,13 +195,14 @@ struct ltt_session {
        char *last_archived_chunk_name;
        LTTNG_OPTIONAL(uint64_t) last_archived_chunk_id;
        struct lttng_dynamic_array destroy_notifiers;
+       struct lttng_dynamic_array clear_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,
-               const char *base_path, struct ltt_session **out_session);
+               struct ltt_session **out_session);
 void session_lock(struct ltt_session *session);
 void session_lock_list(void);
 int session_trylock_list(void);
@@ -204,6 +213,10 @@ void session_destroy(struct ltt_session *session);
 int session_add_destroy_notifier(struct ltt_session *session,
                ltt_session_destroy_notifier notifier, void *user_data);
 
+int session_add_clear_notifier(struct ltt_session *session,
+               ltt_session_clear_notifier notifier, void *user_data);
+void session_notify_clear(struct ltt_session *session);
+
 bool session_get(struct ltt_session *session);
 void session_put(struct ltt_session *session);
 
@@ -251,9 +264,9 @@ int session_set_trace_chunk(struct ltt_session *session,
  * Close a chunk on the remote peers of a session. Has no effect on the
  * ltt_session itself.
  */
-int session_close_trace_chunk(const struct ltt_session *session,
+int session_close_trace_chunk(struct ltt_session *session,
                struct lttng_trace_chunk *trace_chunk,
-               const enum lttng_trace_chunk_command_type *close_command,
+               enum lttng_trace_chunk_command_type close_command,
                char *path);
 
 bool session_output_supports_trace_chunks(const struct ltt_session *session);
This page took 0.024186 seconds and 4 git commands to generate.