X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fconsumer%2Fconsumer.c;h=27a01bd7a4c162c83b92f8c5ff10386771f9dab9;hp=23853e5c29378c80144cfb1bda98cd2fe83305e7;hb=3c215c837498a125ac4a981447368c30fbd92bb4;hpb=d01ef216f908707ffbc3c24caa10359070c5d76c diff --git a/src/common/consumer/consumer.c b/src/common/consumer/consumer.c index 23853e5c2..27a01bd7a 100644 --- a/src/common/consumer/consumer.c +++ b/src/common/consumer/consumer.c @@ -877,6 +877,43 @@ error: return outfd; } +/* + * Write a character on the metadata poll pipe to wake the metadata thread. + * Returns 0 on success, -1 on error. + */ +int consumer_metadata_wakeup_pipe(const struct lttng_consumer_channel *channel) +{ + int ret = 0; + + DBG("Waking up metadata poll thread (writing to pipe): channel name = '%s'", + channel->name); + if (channel->monitor && channel->metadata_stream) { + const char dummy = 'c'; + const ssize_t write_ret = lttng_write( + channel->metadata_stream->ust_metadata_poll_pipe[1], + &dummy, 1); + + if (write_ret < 1) { + if (errno == EWOULDBLOCK) { + /* + * This is fine, the metadata poll thread + * is having a hard time keeping-up, but + * it will eventually wake-up and consume + * the available data. + */ + ret = 0; + } else { + PERROR("Failed to write to UST metadata pipe while attempting to wake-up the metadata poll thread"); + ret = -1; + goto end; + } + } + } + +end: + return ret; +} + /* * Trigger a dump of the metadata content. Following/during the succesful * completion of this call, the metadata poll thread will start receiving @@ -4057,7 +4094,6 @@ int lttng_consumer_rotate_channel(struct lttng_consumer_channel *channel, */ flush_active = produced_pos != consumed_pos; if (!flush_active) { - enum lttng_trace_chunk_status chunk_status; const char *trace_chunk_name; uint64_t trace_chunk_id; @@ -5007,8 +5043,6 @@ enum lttcomm_return_code lttng_consumer_trace_chunk_exists( bool chunk_exists_local, chunk_exists_remote; if (relayd_id) { - int ret; - /* Only used for logging purposes. */ ret = snprintf(relayd_id_buffer, sizeof(relayd_id_buffer), "%" PRIu64, *relayd_id);