X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-consumerd%2Flttng-consumerd.c;h=7f78c4ec2b0971fcfa249a3c35f7c953bd5a8d39;hp=cd0fc73b2167781e600348c711307dc4bf4e2bd2;hb=4d62fbf82e90a66f7196331bf515f58e63801d35;hpb=890d8fe47755c3bad936389cf48ffa141cff41c9 diff --git a/src/bin/lttng-consumerd/lttng-consumerd.c b/src/bin/lttng-consumerd/lttng-consumerd.c index cd0fc73b2..7f78c4ec2 100644 --- a/src/bin/lttng-consumerd/lttng-consumerd.c +++ b/src/bin/lttng-consumerd/lttng-consumerd.c @@ -42,8 +42,8 @@ #include #include -#include -#include +#include +#include #include #include #include @@ -99,14 +99,6 @@ 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; - } - if (ctx) { lttng_consumer_should_exit(ctx); } @@ -127,9 +119,10 @@ static int set_signal_handler(void) return ret; } - sa.sa_handler = sighandler; sa.sa_mask = sigset; sa.sa_flags = 0; + + sa.sa_handler = sighandler; if ((ret = sigaction(SIGTERM, &sa, NULL)) < 0) { PERROR("sigaction"); return ret; @@ -140,6 +133,7 @@ static int set_signal_handler(void) return ret; } + sa.sa_handler = SIG_IGN; if ((ret = sigaction(SIGPIPE, &sa, NULL)) < 0) { PERROR("sigaction"); return ret; @@ -362,12 +356,6 @@ int main(int argc, char **argv) goto exit_health_consumerd_cleanup; } - /* Set up max poll set size */ - if (lttng_poll_set_max_size()) { - retval = -1; - goto exit_init_data; - } - if (*command_sock_path == '\0') { switch (opt_type) { case LTTNG_CONSUMER_KERNEL: @@ -498,7 +486,7 @@ int main(int argc, char **argv) } /* Create thread to manage the client socket */ - ret = pthread_create(&health_thread, NULL, + ret = pthread_create(&health_thread, default_pthread_attr(), thread_manage_health, (void *) NULL); if (ret) { errno = ret; @@ -517,7 +505,7 @@ int main(int argc, char **argv) cmm_smp_mb(); /* Read ready before following operations */ /* Create thread to manage channels */ - ret = pthread_create(&channel_thread, NULL, + ret = pthread_create(&channel_thread, default_pthread_attr(), consumer_thread_channel_poll, (void *) ctx); if (ret) { @@ -528,7 +516,7 @@ int main(int argc, char **argv) } /* Create thread to manage the polling/writing of trace metadata */ - ret = pthread_create(&metadata_thread, NULL, + ret = pthread_create(&metadata_thread, default_pthread_attr(), consumer_thread_metadata_poll, (void *) ctx); if (ret) { @@ -539,8 +527,8 @@ int main(int argc, char **argv) } /* Create thread to manage the polling/writing of trace data */ - ret = pthread_create(&data_thread, NULL, consumer_thread_data_poll, - (void *) ctx); + ret = pthread_create(&data_thread, default_pthread_attr(), + consumer_thread_data_poll, (void *) ctx); if (ret) { errno = ret; PERROR("pthread_create"); @@ -549,7 +537,7 @@ int main(int argc, char **argv) } /* Create the thread to manage the receive of fd */ - ret = pthread_create(&sessiond_thread, NULL, + ret = pthread_create(&sessiond_thread, default_pthread_attr(), consumer_thread_sessiond_poll, (void *) ctx); if (ret) { @@ -563,7 +551,7 @@ int main(int argc, char **argv) * Create the thread to manage the UST metadata periodic timer and * live timer. */ - ret = pthread_create(&metadata_timer_thread, NULL, + ret = pthread_create(&metadata_timer_thread, default_pthread_attr(), consumer_timer_thread, (void *) ctx); if (ret) { errno = ret; @@ -634,6 +622,12 @@ exit_init_data: tmp_ctx = ctx; ctx = NULL; cmm_barrier(); /* Clear ctx for signal handler. */ + /* + * Wait for all pending call_rcu work to complete before tearing + * down data structures. call_rcu worker may be trying to + * perform lookups in those structures. + */ + rcu_barrier(); lttng_consumer_destroy(tmp_ctx); lttng_consumer_cleanup();