X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-consumerd%2Flttng-consumerd.c;h=84868077c39e5e85624a973d70bfca270670bce2;hb=31fa4745f181bd1bdbceb89fbe27e130f5b4e2b9;hp=1cc11d2d5898a35d2278826618a20042eb818a25;hpb=df27ef7b025240e4b93a74193fb61569fb8d3d14;p=lttng-tools.git diff --git a/src/bin/lttng-consumerd/lttng-consumerd.c b/src/bin/lttng-consumerd/lttng-consumerd.c index 1cc11d2d5..84868077c 100644 --- a/src/bin/lttng-consumerd/lttng-consumerd.c +++ b/src/bin/lttng-consumerd/lttng-consumerd.c @@ -51,8 +51,8 @@ /* TODO : support UST (all direct kernel-ctl accesses). */ -/* the two threads (receive fd, poll and metadata) */ -static pthread_t data_thread, metadata_thread, sessiond_thread; +/* threads (channel handling, poll, metadata, sessiond) */ +static pthread_t channel_thread, data_thread, metadata_thread, sessiond_thread; /* to count the number of times the user pressed ctrl+c */ static int sigintcount = 0; @@ -79,6 +79,14 @@ static void sighandler(int sig) return; } + /* + * Ignore SIGPIPE because it should not stop the consumer whenever a + * SIGPIPE is catched through a FD operation. + */ + if (sig == SIGPIPE) { + return; + } + lttng_consumer_should_exit(ctx); } @@ -286,7 +294,7 @@ int main(int argc, char **argv) /* Set up max poll set size */ lttng_poll_set_max_size(); - if (strlen(command_sock_path) == 0) { + if (*command_sock_path == '\0') { switch (opt_type) { case LTTNG_CONSUMER_KERNEL: snprintf(command_sock_path, PATH_MAX, DEFAULT_KCONSUMERD_CMD_SOCK_PATH, @@ -322,7 +330,7 @@ int main(int argc, char **argv) } lttng_consumer_set_command_sock_path(ctx, command_sock_path); - if (strlen(error_sock_path) == 0) { + if (*error_sock_path == '\0') { switch (opt_type) { case LTTNG_CONSUMER_KERNEL: snprintf(error_sock_path, PATH_MAX, DEFAULT_KCONSUMERD_ERR_SOCK_PATH, @@ -355,12 +363,20 @@ int main(int argc, char **argv) } lttng_consumer_set_error_sock(ctx, ret); + /* Create thread to manage channels */ + ret = pthread_create(&channel_thread, NULL, consumer_thread_channel_poll, + (void *) ctx); + if (ret != 0) { + perror("pthread_create"); + goto error; + } + /* Create thread to manage the polling/writing of trace metadata */ ret = pthread_create(&metadata_thread, NULL, consumer_thread_metadata_poll, (void *) ctx); if (ret != 0) { perror("pthread_create"); - goto error; + goto metadata_error; } /* Create thread to manage the polling/writing of trace data */ @@ -399,6 +415,13 @@ data_error: goto error; } +metadata_error: + ret = pthread_join(channel_thread, &status); + if (ret != 0) { + perror("pthread_join"); + goto error; + } + if (!ret) { ret = EXIT_SUCCESS; lttng_consumer_send_error(ctx, LTTCOMM_CONSUMERD_EXIT_SUCCESS);