X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-consumerd%2Flttng-consumerd.c;h=e33a470f59268e6c3f33f09c72e506930ae859fd;hb=1fc79fb475198741b09a13b5397f018dff4b1aec;hp=84868077c39e5e85624a973d70bfca270670bce2;hpb=d8ef542d25837bdfb960e5df2a91c5d18f5ef401;p=lttng-tools.git diff --git a/src/bin/lttng-consumerd/lttng-consumerd.c b/src/bin/lttng-consumerd/lttng-consumerd.c index 84868077c..e33a470f5 100644 --- a/src/bin/lttng-consumerd/lttng-consumerd.c +++ b/src/bin/lttng-consumerd/lttng-consumerd.c @@ -44,15 +44,19 @@ #include #include #include +#include #include #include #include "lttng-consumerd.h" +#include "health-consumerd.h" /* TODO : support UST (all direct kernel-ctl accesses). */ /* threads (channel handling, poll, metadata, sessiond) */ + static pthread_t channel_thread, data_thread, metadata_thread, sessiond_thread; +static pthread_t metadata_timer_thread; /* to count the number of times the user pressed ctrl+c */ static int sigintcount = 0; @@ -69,6 +73,9 @@ static enum lttng_consumer_type opt_type = LTTNG_CONSUMER_KERNEL; /* the liblttngconsumerd context */ static struct lttng_consumer_local_data *ctx; +/* Consumerd health monitoring */ +struct health_app *health_consumerd; + /* * Signal handler for the daemon */ @@ -322,6 +329,11 @@ int main(int argc, char **argv) set_ulimit(); } + health_consumerd = health_app_create(NR_HEALTH_CONSUMERD_TYPES); + if (!health_consumerd) { + goto error; + } + /* create the consumer instance with and assign the callbacks */ ctx = lttng_consumer_create(opt_type, lttng_consumer_read_subbuffer, NULL, lttng_consumer_on_recv_stream, NULL); @@ -363,6 +375,17 @@ int main(int argc, char **argv) } lttng_consumer_set_error_sock(ctx, ret); + /* + * Block RT signals used for UST periodical metadata flush and the live + * timer in main, and create a dedicated thread to handle these signals. + */ + consumer_signal_init(); + + ctx->type = opt_type; + + /* Initialize communication library */ + lttcomm_init(); + /* Create thread to manage channels */ ret = pthread_create(&channel_thread, NULL, consumer_thread_channel_poll, (void *) ctx); @@ -395,6 +418,24 @@ int main(int argc, char **argv) goto sessiond_error; } + /* + * Create the thread to manage the UST metadata periodic timer and + * live timer. + */ + ret = pthread_create(&metadata_timer_thread, NULL, + consumer_timer_thread, (void *) ctx); + if (ret != 0) { + perror("pthread_create"); + goto metadata_timer_error; + } + + ret = pthread_detach(metadata_timer_thread); + if (ret) { + errno = ret; + perror("pthread_detach"); + } + +metadata_timer_error: ret = pthread_join(sessiond_thread, &status); if (ret != 0) { perror("pthread_join"); @@ -430,11 +471,16 @@ metadata_error: error: ret = EXIT_FAILURE; - lttng_consumer_send_error(ctx, LTTCOMM_CONSUMERD_EXIT_FAILURE); + if (ctx) { + lttng_consumer_send_error(ctx, LTTCOMM_CONSUMERD_EXIT_FAILURE); + } end: lttng_consumer_destroy(ctx); lttng_consumer_cleanup(); + if (health_consumerd) { + health_app_destroy(health_consumerd); + } return ret; }