Fix RCU-related hangs: incorrect lttng_ht_destroy use
[lttng-tools.git] / src / bin / lttng-sessiond / trace-kernel.c
index 53053f2067c6a8b20cc92f0b6a3019fb360c473b..d889b6ab6582570587c9c4a66cdcf51fad30943a 100644 (file)
@@ -77,7 +77,7 @@ struct ltt_kernel_event *trace_kernel_get_event_by_name(
  *
  * Return pointer to structure or NULL.
  */
-struct ltt_kernel_session *trace_kernel_create_session(char *path)
+struct ltt_kernel_session *trace_kernel_create_session(void)
 {
        struct ltt_kernel_session *lks = NULL;
 
@@ -109,25 +109,6 @@ struct ltt_kernel_session *trace_kernel_create_session(char *path)
         */
        lks->tmp_consumer = NULL;
 
-       if (*path != '\0') {
-               int ret;
-
-               /* Use the default consumer output which is the tracing session path. */
-               ret = snprintf(lks->consumer->dst.trace_path, PATH_MAX,
-                               "%s" DEFAULT_KERNEL_TRACE_DIR, path);
-               if (ret < 0) {
-                       PERROR("snprintf consumer trace path");
-                       goto error;
-               }
-
-               /* Set session path */
-               ret = asprintf(&lks->trace_path, "%s" DEFAULT_KERNEL_TRACE_DIR, path);
-               if (ret < 0) {
-                       PERROR("asprintf kernel traces path");
-                       goto error;
-               }
-       }
-
        return lks;
 
 error:
@@ -158,6 +139,7 @@ struct ltt_kernel_channel *trace_kernel_create_channel(
        lkc->channel = zmalloc(sizeof(struct lttng_channel));
        if (lkc->channel == NULL) {
                PERROR("lttng_channel zmalloc");
+               free(lkc);
                goto error;
        }
        memcpy(lkc->channel, chan, sizeof(struct lttng_channel));
@@ -272,8 +254,8 @@ struct ltt_kernel_metadata *trace_kernel_create_metadata(void)
        chan->attr.overwrite = DEFAULT_CHANNEL_OVERWRITE;
        chan->attr.subbuf_size = default_get_metadata_subbuf_size();
        chan->attr.num_subbuf = DEFAULT_METADATA_SUBBUF_NUM;
-       chan->attr.switch_timer_interval = DEFAULT_CHANNEL_SWITCH_TIMER;
-       chan->attr.read_timer_interval = DEFAULT_CHANNEL_READ_TIMER;
+       chan->attr.switch_timer_interval = DEFAULT_KERNEL_CHANNEL_SWITCH_TIMER;
+       chan->attr.read_timer_interval = DEFAULT_KERNEL_CHANNEL_READ_TIMER;
        chan->attr.output = DEFAULT_KERNEL_CHANNEL_OUTPUT;
 
        /* Init metadata */
@@ -319,6 +301,7 @@ struct ltt_kernel_stream *trace_kernel_create_stream(const char *name,
        /* Init stream */
        lks->fd = -1;
        lks->state = 0;
+       lks->cpu = count;
 
        return lks;
 
@@ -438,6 +421,8 @@ void trace_kernel_destroy_metadata(struct ltt_kernel_metadata *metadata)
 
 /*
  * Cleanup kernel session structure
+ *
+ * Should *NOT* be called with RCU read-side lock held.
  */
 void trace_kernel_destroy_session(struct ltt_kernel_session *session)
 {
@@ -475,6 +460,5 @@ void trace_kernel_destroy_session(struct ltt_kernel_session *session)
        consumer_destroy_output(session->consumer);
        consumer_destroy_output(session->tmp_consumer);
 
-       free(session->trace_path);
        free(session);
 }
This page took 0.023803 seconds and 4 git commands to generate.