X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fconsumer.c;h=aa050eceb56a48622ddfbf04b02c87d5f88ee9f6;hb=b1d41407438e92d79fa17cde7f6da0cc559386f9;hp=3a4577ab0bb36dfa98aa655447526bfdf8717131;hpb=806e2684ce24d3772af37ee46c5f0500c7a0723f;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/consumer.c b/src/bin/lttng-sessiond/consumer.c index 3a4577ab0..aa050eceb 100644 --- a/src/bin/lttng-sessiond/consumer.c +++ b/src/bin/lttng-sessiond/consumer.c @@ -314,6 +314,7 @@ void consumer_destroy_output(struct consumer_output *obj) */ struct consumer_output *consumer_copy_output(struct consumer_output *obj) { + struct lttng_ht *tmp_ht_ptr; struct lttng_ht_iter iter; struct consumer_socket *socket, *copy_sock; struct consumer_output *output; @@ -324,11 +325,13 @@ struct consumer_output *consumer_copy_output(struct consumer_output *obj) if (output == NULL) { goto error; } + /* Avoid losing the HT reference after the memcpy() */ + tmp_ht_ptr = output->socks; memcpy(output, obj, sizeof(struct consumer_output)); - /* Copy sockets */ - output->socks = lttng_ht_new(0, LTTNG_HT_TYPE_ULONG); + /* Putting back the HT pointer and start copying socket(s). */ + output->socks = tmp_ht_ptr; cds_lfht_for_each_entry(obj->socks->ht, &iter.iter, socket, node.node) { /* Create new socket object. */ @@ -337,6 +340,7 @@ struct consumer_output *consumer_copy_output(struct consumer_output *obj) goto malloc_error; } + copy_sock->registered = socket->registered; copy_sock->lock = socket->lock; consumer_add_socket(copy_sock, output); } @@ -707,7 +711,7 @@ int consumer_is_data_available(unsigned int id, struct consumer_output *consumer) { int ret; - int32_t ret_code; + int32_t ret_code = 1; /* Default is that the data is available */ struct consumer_socket *socket; struct lttng_ht_iter iter; struct lttcomm_consumer_msg msg; @@ -720,6 +724,7 @@ int consumer_is_data_available(unsigned int id, DBG3("Consumer data available for id %u", id); + /* Send command for each consumer */ cds_lfht_for_each_entry(consumer->socks->ht, &iter.iter, socket, node.node) { /* Code flow error */