X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fconsumer.c;h=892c841ba0f8958ae46cff1f4d577f0426df1415;hb=f385ae0a8f5c34cc33ca57cdb412393f90f9c0a8;hp=b8695698da7301b69b114fe373680b248294b486;hpb=d3e2ba59faddb31870e2ce29b6a881f7ad5ad883;p=lttng-tools.git diff --git a/src/common/consumer.c b/src/common/consumer.c index b8695698d..892c841ba 100644 --- a/src/common/consumer.c +++ b/src/common/consumer.c @@ -520,6 +520,9 @@ struct lttng_consumer_stream *consumer_allocate_stream(uint64_t channel_key, stream->metadata_flag = 1; /* Metadata is flat out. */ strncpy(stream->name, DEFAULT_METADATA_NAME, sizeof(stream->name)); + /* Live rendez-vous point. */ + pthread_cond_init(&stream->metadata_rdv, NULL); + pthread_mutex_init(&stream->metadata_rdv_lock, NULL); } else { /* Format stream name to _ */ ret = snprintf(stream->name, sizeof(stream->name), "%s_%d", @@ -3005,6 +3008,7 @@ void *consumer_thread_sessiond_poll(void *data) * ERR() here. */ DBG("Communication interrupted on command socket"); + err = 0; goto end; } if (consumer_quit) { @@ -3062,6 +3066,9 @@ ssize_t lttng_consumer_read_subbuffer(struct lttng_consumer_stream *stream, ssize_t ret; pthread_mutex_lock(&stream->lock); + if (stream->metadata_flag) { + pthread_mutex_lock(&stream->metadata_rdv_lock); + } switch (consumer_data.type) { case LTTNG_CONSUMER_KERNEL: @@ -3078,6 +3085,10 @@ ssize_t lttng_consumer_read_subbuffer(struct lttng_consumer_stream *stream, break; } + if (stream->metadata_flag) { + pthread_cond_broadcast(&stream->metadata_rdv); + pthread_mutex_unlock(&stream->metadata_rdv_lock); + } pthread_mutex_unlock(&stream->lock); return ret; }