Create an initial trace chunk on first start of an ltt_session
[lttng-tools.git] / src / bin / lttng-sessiond / kernel.c
index edb7f7b2f2f3f83efd53ac077f005b26388d52d9..7173fac16348d59cab3f2e220cb927797761fcf3 100644 (file)
@@ -24,6 +24,7 @@
 #include <inttypes.h>
 
 #include <common/common.h>
+#include <common/trace-chunk.h>
 #include <common/kernel-ctl/kernel-ctl.h>
 #include <common/kernel-ctl/kernel-ioctl.h>
 #include <common/sessiond-comm/sessiond-comm.h>
@@ -1159,12 +1160,15 @@ end_boot_id:
  */
 void kernel_destroy_session(struct ltt_kernel_session *ksess)
 {
+       struct lttng_trace_chunk *trace_chunk;
+
        if (ksess == NULL) {
                DBG3("No kernel session when tearing down session");
                return;
        }
 
        DBG("Tearing down kernel session");
+       trace_chunk = ksess->current_trace_chunk;
 
        /*
         * Destroy channels on the consumer if at least one FD has been sent and we
@@ -1198,6 +1202,7 @@ void kernel_destroy_session(struct ltt_kernel_session *ksess)
        consumer_output_send_destroy_relayd(ksess->consumer);
 
        trace_kernel_destroy_session(ksess);
+       lttng_trace_chunk_put(trace_chunk);
 }
 
 /*
@@ -1244,7 +1249,7 @@ enum lttng_error_code kernel_snapshot_record(struct ltt_kernel_session *ksess,
        struct consumer_socket *socket;
        struct lttng_ht_iter iter;
        struct ltt_kernel_metadata *saved_metadata;
-       struct ltt_session *session;
+       struct ltt_session *session = NULL;
        uint64_t trace_archive_id;
 
        assert(ksess);
@@ -1297,7 +1302,7 @@ enum lttng_error_code kernel_snapshot_record(struct ltt_kernel_session *ksess,
                /* Put back the saved consumer output into the session. */
                ksess->consumer = saved_output;
                if (ret < 0) {
-                       status = LTTNG_ERR_KERN_CONSUMER_FAIL;
+                       status = LTTNG_ERR_KERN_META_FAIL;
                        goto error_consumer;
                }
 
@@ -1344,7 +1349,9 @@ error:
        /* Restore metadata state.*/
        ksess->metadata = saved_metadata;
        ksess->metadata_stream_fd = saved_metadata_fd;
-
+       if (session) {
+               session_put(session);
+       }
        rcu_read_unlock();
        return status;
 }
@@ -1430,7 +1437,7 @@ enum lttng_error_code kernel_rotate_session(struct ltt_session *session)
                                        chan->key, session->name);
                        ret = consumer_rotate_channel(socket, chan->key,
                                        ksess->uid, ksess->gid, ksess->consumer,
-                                       ksess->consumer->subdir,
+                                       ksess->consumer->domain_subdir,
                                        /* is_metadata_channel */ false,
                                        session->current_archive_id);
                        if (ret < 0) {
@@ -1444,7 +1451,7 @@ enum lttng_error_code kernel_rotate_session(struct ltt_session *session)
                 */
                ret = consumer_rotate_channel(socket, ksess->metadata->key,
                                ksess->uid, ksess->gid, ksess->consumer,
-                               ksess->consumer->subdir,
+                               ksess->consumer->domain_subdir,
                                /* is_metadata_channel */ true,
                                session->current_archive_id);
                if (ret < 0) {
This page took 0.024318 seconds and 4 git commands to generate.