Fix: shm-path: handling of snprintf return value
[lttng-tools.git] / src / common / ust-consumer / ust-consumer.c
index 7dfcf9a3cf46381675222dfbcb94a474e0e8eaa9..08e6ee0d8f895591c995023ffe1292dc5040b773 100644 (file)
@@ -82,6 +82,7 @@ static void destroy_channel(struct lttng_consumer_channel *channel)
         */
        if (channel->uchan) {
                lttng_ustconsumer_del_channel(channel);
+               lttng_ustconsumer_free_channel(channel);
        }
        free(channel);
 }
@@ -253,8 +254,8 @@ int get_stream_shm_path(char *stream_shm_path, const char *shm_path, int cpu)
        strncpy(stream_shm_path, shm_path, PATH_MAX);
        stream_shm_path[PATH_MAX - 1] = '\0';
        ret = snprintf(cpu_nr, UINT_MAX_STR_LEN, "%u", cpu);
-       if (ret != 1) {
-               ret = -1;
+       if (ret < 0) {
+               PERROR("snprintf");
                goto end;
        }
        strncat(stream_shm_path, cpu_nr,
@@ -1830,8 +1831,6 @@ void lttng_ustconsumer_del_channel(struct lttng_consumer_channel *chan)
        if (chan->switch_timer_enabled == 1) {
                consumer_timer_switch_stop(chan);
        }
-       consumer_metadata_cache_destroy(chan);
-       ustctl_destroy_channel(chan->uchan);
        for (i = 0; i < chan->nr_stream_fds; i++) {
                int ret;
 
@@ -1852,7 +1851,6 @@ void lttng_ustconsumer_del_channel(struct lttng_consumer_channel *chan)
                        }
                }
        }
-       free(chan->stream_fds);
        /* Try to rmdir all directories under shm_path root. */
        if (chan->root_shm_path[0]) {
                (void) run_as_recursive_rmdir(chan->root_shm_path,
@@ -1860,6 +1858,16 @@ void lttng_ustconsumer_del_channel(struct lttng_consumer_channel *chan)
        }
 }
 
+void lttng_ustconsumer_free_channel(struct lttng_consumer_channel *chan)
+{
+       assert(chan);
+       assert(chan->uchan);
+
+       consumer_metadata_cache_destroy(chan);
+       ustctl_destroy_channel(chan->uchan);
+       free(chan->stream_fds);
+}
+
 void lttng_ustconsumer_del_stream(struct lttng_consumer_stream *stream)
 {
        assert(stream);
This page took 0.025195 seconds and 5 git commands to generate.