Fix: lttng-sessiond: cpu hotplug stream number mismatch
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 11 May 2017 20:00:54 +0000 (16:00 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 19 May 2017 20:56:25 +0000 (16:56 -0400)
The counter should be always increasing (kept in the channel), rather
than local to the function. This causes cpu hotplug handling to
disregard further streams that should be added to the consumer output
on CPU hotplug.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/kernel.c

index aa51649783f64c0e324c0090c42033cdbbb41f7a..e478499336896f5d739e087c8ee91e3a395886cd 100644 (file)
@@ -644,17 +644,22 @@ error:
  * Open stream of channel, register it to the kernel tracer and add it
  * to the stream list of the channel.
  *
  * Open stream of channel, register it to the kernel tracer and add it
  * to the stream list of the channel.
  *
+ * Note: given that the streams may appear in random order wrt CPU
+ * number (e.g. cpu hotplug), the index value of the stream number in
+ * the stream name is not necessarily linked to the CPU number.
+ *
  * Return the number of created stream. Else, a negative value.
  */
 int kernel_open_channel_stream(struct ltt_kernel_channel *channel)
 {
  * Return the number of created stream. Else, a negative value.
  */
 int kernel_open_channel_stream(struct ltt_kernel_channel *channel)
 {
-       int ret, count = 0;
+       int ret;
        struct ltt_kernel_stream *lks;
 
        assert(channel);
 
        while ((ret = kernctl_create_stream(channel->fd)) >= 0) {
        struct ltt_kernel_stream *lks;
 
        assert(channel);
 
        while ((ret = kernctl_create_stream(channel->fd)) >= 0) {
-               lks = trace_kernel_create_stream(channel->channel->name, count);
+               lks = trace_kernel_create_stream(channel->channel->name,
+                               channel->stream_count);
                if (lks == NULL) {
                        ret = close(ret);
                        if (ret) {
                if (lks == NULL) {
                        ret = close(ret);
                        if (ret) {
@@ -673,13 +678,10 @@ int kernel_open_channel_stream(struct ltt_kernel_channel *channel)
                lks->tracefile_size = channel->channel->attr.tracefile_size;
                lks->tracefile_count = channel->channel->attr.tracefile_count;
 
                lks->tracefile_size = channel->channel->attr.tracefile_size;
                lks->tracefile_count = channel->channel->attr.tracefile_count;
 
-               /* Add stream to channe stream list */
+               /* Add stream to channel stream list */
                cds_list_add(&lks->list, &channel->stream_list.head);
                channel->stream_count++;
 
                cds_list_add(&lks->list, &channel->stream_list.head);
                channel->stream_count++;
 
-               /* Increment counter which represent CPU number. */
-               count++;
-
                DBG("Kernel stream %s created (fd: %d, state: %d)", lks->name, lks->fd,
                                lks->state);
        }
                DBG("Kernel stream %s created (fd: %d, state: %d)", lks->name, lks->fd,
                                lks->state);
        }
This page took 0.031045 seconds and 5 git commands to generate.