[lttng-dev] [PATCH 2/3 lttng-tools] Change consumer_metadata_pipe to be a lttng_pipe
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Wed May 15 15:19:07 EDT 2013
why isn't this patch using lttng_pipe_read() ?
* David Goulet (dgoulet at efficios.com) wrote:
> Signed-off-by: David Goulet <dgoulet at efficios.com>
> ---
> src/common/consumer.c | 42 ++++++++------------------
> src/common/consumer.h | 2 +-
> src/common/kernel-consumer/kernel-consumer.c | 2 +-
> src/common/ust-consumer/ust-consumer.c | 2 +-
> 4 files changed, 15 insertions(+), 33 deletions(-)
>
> diff --git a/src/common/consumer.c b/src/common/consumer.c
> index bd618dd..ef35927 100644
> --- a/src/common/consumer.c
> +++ b/src/common/consumer.c
> @@ -77,21 +77,6 @@ static struct lttng_ht *metadata_ht;
> static struct lttng_ht *data_ht;
>
> /*
> - * Notify a thread pipe to poll back again. This usually means that some global
> - * state has changed so we just send back the thread in a poll wait call.
> - */
> -static void notify_thread_pipe(int wpipe)
> -{
> - int ret;
> -
> - do {
> - struct lttng_consumer_stream *null_stream = NULL;
> -
> - ret = write(wpipe, &null_stream, sizeof(null_stream));
> - } while (ret < 0 && errno == EINTR);
> -}
> -
> -/*
> * Notify a thread lttng pipe to poll back again. This usually means that some
> * global state has changed so we just send back the thread in a poll wait
> * call.
> @@ -421,7 +406,7 @@ static void cleanup_relayd(struct consumer_relayd_sock_pair *relayd,
> */
> if (ctx) {
> notify_thread_lttng_pipe(ctx->consumer_data_pipe);
> - notify_thread_pipe(ctx->consumer_metadata_pipe[1]);
> + notify_thread_lttng_pipe(ctx->consumer_metadata_pipe);
> }
> }
>
> @@ -1204,8 +1189,8 @@ struct lttng_consumer_local_data *lttng_consumer_create(
> goto error_channel_pipe;
> }
>
> - ret = utils_create_pipe(ctx->consumer_metadata_pipe);
> - if (ret < 0) {
> + ctx->consumer_metadata_pipe = lttng_pipe_open(0);
> + if (!ctx->consumer_metadata_pipe) {
> goto error_metadata_pipe;
> }
>
> @@ -1217,7 +1202,7 @@ struct lttng_consumer_local_data *lttng_consumer_create(
> return ctx;
>
> error_splice_pipe:
> - utils_close_pipe(ctx->consumer_metadata_pipe);
> + lttng_pipe_destroy(ctx->consumer_metadata_pipe);
> error_metadata_pipe:
> utils_close_pipe(ctx->consumer_channel_pipe);
> error_channel_pipe:
> @@ -1252,6 +1237,7 @@ void lttng_consumer_destroy(struct lttng_consumer_local_data *ctx)
> utils_close_pipe(ctx->consumer_thread_pipe);
> utils_close_pipe(ctx->consumer_channel_pipe);
> lttng_pipe_destroy(ctx->consumer_data_pipe);
> + lttng_pipe_destroy(ctx->consumer_metadata_pipe);
> utils_close_pipe(ctx->consumer_should_quit);
> utils_close_pipe(ctx->consumer_splice_metadata_pipe);
>
> @@ -2132,7 +2118,8 @@ void *consumer_thread_metadata_poll(void *data)
> goto end_poll;
> }
>
> - ret = lttng_poll_add(&events, ctx->consumer_metadata_pipe[0], LPOLLIN);
> + ret = lttng_poll_add(&events,
> + lttng_pipe_get_readfd(ctx->consumer_metadata_pipe), LPOLLIN);
> if (ret < 0) {
> goto end;
> }
> @@ -2170,18 +2157,16 @@ restart:
> continue;
> }
>
> - if (pollfd == ctx->consumer_metadata_pipe[0]) {
> + if (pollfd == lttng_pipe_get_readfd(ctx->consumer_metadata_pipe)) {
> if (revents & (LPOLLERR | LPOLLHUP )) {
> DBG("Metadata thread pipe hung up");
> /*
> * Remove the pipe from the poll set and continue the loop
> * since their might be data to consume.
> */
> - lttng_poll_del(&events, ctx->consumer_metadata_pipe[0]);
> - ret = close(ctx->consumer_metadata_pipe[0]);
> - if (ret < 0) {
> - PERROR("close metadata pipe");
> - }
> + lttng_poll_del(&events,
> + lttng_pipe_get_readfd(ctx->consumer_metadata_pipe));
> + lttng_pipe_read_close(ctx->consumer_metadata_pipe);
> continue;
> } else if (revents & LPOLLIN) {
> do {
> @@ -2541,10 +2526,7 @@ end:
> * only tracked fd in the poll set. The thread will take care of closing
> * the read side.
> */
> - ret = close(ctx->consumer_metadata_pipe[1]);
> - if (ret < 0) {
> - PERROR("close data pipe");
> - }
> + (void) lttng_pipe_write_close(ctx->consumer_metadata_pipe);
>
> destroy_data_stream_ht(data_ht);
>
> diff --git a/src/common/consumer.h b/src/common/consumer.h
> index 91039e8..3726fd1 100644
> --- a/src/common/consumer.h
> +++ b/src/common/consumer.h
> @@ -351,7 +351,7 @@ struct lttng_consumer_local_data {
> /* to let the signal handler wake up the fd receiver thread */
> int consumer_should_quit[2];
> /* Metadata poll thread pipe. Transfer metadata stream to it */
> - int consumer_metadata_pipe[2];
> + struct lttng_pipe *consumer_metadata_pipe;
> };
>
> /*
> diff --git a/src/common/kernel-consumer/kernel-consumer.c b/src/common/kernel-consumer/kernel-consumer.c
> index d8aec49..f23fc9c 100644
> --- a/src/common/kernel-consumer/kernel-consumer.c
> +++ b/src/common/kernel-consumer/kernel-consumer.c
> @@ -288,7 +288,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
>
> /* Get the right pipe where the stream will be sent. */
> if (new_stream->metadata_flag) {
> - stream_pipe = ctx->consumer_metadata_pipe[1];
> + stream_pipe = lttng_pipe_get_writefd(ctx->consumer_metadata_pipe);
> } else {
> stream_pipe = lttng_pipe_get_writefd(ctx->consumer_data_pipe);
> }
> diff --git a/src/common/ust-consumer/ust-consumer.c b/src/common/ust-consumer/ust-consumer.c
> index ddf80da..a81e9d4 100644
> --- a/src/common/ust-consumer/ust-consumer.c
> +++ b/src/common/ust-consumer/ust-consumer.c
> @@ -189,7 +189,7 @@ static int send_stream_to_thread(struct lttng_consumer_stream *stream,
>
> /* Get the right pipe where the stream will be sent. */
> if (stream->metadata_flag) {
> - stream_pipe = ctx->consumer_metadata_pipe[1];
> + stream_pipe = lttng_pipe_get_writefd(ctx->consumer_metadata_pipe);
> } else {
> stream_pipe = lttng_pipe_get_writefd(ctx->consumer_data_pipe);
> }
> --
> 1.7.10.4
>
>
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list