relayd: add remote trace chunk close command
[lttng-tools.git] / src / bin / lttng-sessiond / session.c
index 4a15c9a9ad53eac1106c01f380bea8f70c114985..4b5c22bfb8626ef8f52b48ebbb75a77d9b4b05e8 100644 (file)
@@ -429,8 +429,6 @@ int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
        struct lttng_trace_chunk *current_trace_chunk;
        uint64_t chunk_id;
        enum lttng_trace_chunk_status chunk_status;
-       const uint64_t relayd_id = session->consumer->net_seq_index;
-       const bool is_local_trace = relayd_id  == -1ULL;
 
        rcu_read_lock();
        /*
@@ -470,6 +468,12 @@ int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
        }
 
        if (session->ust_session) {
+               const uint64_t relayd_id =
+                               session->ust_session->consumer->net_seq_index;
+               const bool is_local_trace =
+                               session->ust_session->consumer->type ==
+                               CONSUMER_DST_LOCAL;
+
                session->ust_session->current_trace_chunk = new_trace_chunk;
                 if (is_local_trace) {
                        enum lttng_error_code ret_error_code;
@@ -495,6 +499,12 @@ int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
                 }
         }
        if (session->kernel_session) {
+               const uint64_t relayd_id =
+                               session->kernel_session->consumer->net_seq_index;
+               const bool is_local_trace =
+                               session->kernel_session->consumer->type ==
+                               CONSUMER_DST_LOCAL;
+
                session->kernel_session->current_trace_chunk = new_trace_chunk;
                if (is_local_trace) {
                        enum lttng_error_code ret_error_code;
@@ -667,7 +677,8 @@ error:
 }
 
 int session_close_trace_chunk(const struct ltt_session *session,
-               struct lttng_trace_chunk *trace_chunk)
+               struct lttng_trace_chunk *trace_chunk,
+               const enum lttng_trace_chunk_command_type *close_command)
 {
        int ret = 0;
        bool error_occurred = false;
@@ -676,6 +687,15 @@ int session_close_trace_chunk(const struct ltt_session *session,
        enum lttng_trace_chunk_status chunk_status;
        const time_t chunk_close_timestamp = time(NULL);
 
+       if (close_command) {
+               chunk_status = lttng_trace_chunk_set_close_command(
+                               trace_chunk, *close_command);
+               if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
+                       ret = -1;
+                       goto end;
+               }
+       }
+
        if (chunk_close_timestamp == (time_t) -1) {
                ERR("Failed to sample the close timestamp of the current trace chunk of session \"%s\"",
                                session->name);
@@ -772,9 +792,9 @@ void session_release(struct urcu_ref *ref)
        ksess = session->kernel_session;
 
        session_notify_destruction(session);
-       lttng_dynamic_array_reset(&session->destroy_notifiers, NULL);
+       lttng_dynamic_array_reset(&session->destroy_notifiers);
        if (session->current_trace_chunk) {
-               ret = session_close_trace_chunk(session, session->current_trace_chunk);
+               ret = session_close_trace_chunk(session, session->current_trace_chunk, NULL);
                if (ret) {
                        ERR("Failed to close the current trace chunk of session \"%s\" during its release",
                                        session->name);
@@ -977,7 +997,8 @@ enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
        }
 
        lttng_dynamic_array_init(&new_session->destroy_notifiers,
-                       sizeof(struct ltt_session_destroy_notifier_element));
+                       sizeof(struct ltt_session_destroy_notifier_element),
+                       NULL);
        urcu_ref_init(&new_session->ref);
        pthread_mutex_init(&new_session->lock, NULL);
 
This page took 0.02338 seconds and 4 git commands to generate.