X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-consumerd%2Flttng-consumerd.c;h=299776aa00400ea6ab806cb98a49f1a1b0e30f98;hp=cf9cb205c35ba73b600bb08125ced84dbb43aada;hb=6c1c0768320135c6936c371b09731851b508c023;hpb=5c635c724d60fe8e8bfeb00907dfa1e113cc3548 diff --git a/src/bin/lttng-consumerd/lttng-consumerd.c b/src/bin/lttng-consumerd/lttng-consumerd.c index cf9cb205c..299776aa0 100644 --- a/src/bin/lttng-consumerd/lttng-consumerd.c +++ b/src/bin/lttng-consumerd/lttng-consumerd.c @@ -17,6 +17,7 @@ */ #define _GNU_SOURCE +#define _LGPL_SOURCE #include #include #include @@ -65,6 +66,8 @@ static int sigintcount = 0; /* Argument variables */ int lttng_opt_quiet; /* not static in error.h */ int lttng_opt_verbose; /* not static in error.h */ +int lttng_opt_mi; /* not static in error.h */ + static int opt_daemon; static const char *progname; static char command_sock_path[PATH_MAX]; /* Global command socket path */ @@ -77,6 +80,10 @@ static struct lttng_consumer_local_data *ctx; /* Consumerd health monitoring */ struct health_app *health_consumerd; +const char *tracing_group_name = DEFAULT_TRACING_GROUP; + +int lttng_consumer_ready = NR_LTTNG_CONSUMER_READY; + enum lttng_consumer_type lttng_consumer_get_type(void) { if (!ctx) { @@ -150,9 +157,9 @@ static void usage(FILE *fp) fprintf(fp, "Usage: %s OPTIONS\n\nOptions:\n", progname); fprintf(fp, " -h, --help " "Display this usage.\n"); - fprintf(fp, " -c, --consumerd-cmd-sock PATH " + fprintf(fp, " -c, --consumerd-cmd-sock PATH " "Specify path for the command socket\n"); - fprintf(fp, " -e, --consumerd-err-sock PATH " + fprintf(fp, " -e, --consumerd-err-sock PATH " "Specify path for the error socket\n"); fprintf(fp, " -d, --daemonize " "Start as a daemon.\n"); @@ -162,6 +169,8 @@ static void usage(FILE *fp) "Verbose mode. Activate DBG() macro.\n"); fprintf(fp, " -V, --version " "Show version number.\n"); + fprintf(fp, " -g, --group NAME " + "Specify the tracing group name. (default: tracing)\n"); fprintf(fp, " -k, --kernel " "Consumer kernel buffers (default).\n"); fprintf(fp, " -u, --ust " @@ -185,6 +194,7 @@ static void parse_args(int argc, char **argv) { "consumerd-cmd-sock", 1, 0, 'c' }, { "consumerd-err-sock", 1, 0, 'e' }, { "daemonize", 0, 0, 'd' }, + { "group", 1, 0, 'g' }, { "help", 0, 0, 'h' }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, @@ -198,7 +208,7 @@ static void parse_args(int argc, char **argv) while (1) { int option_index = 0; - c = getopt_long(argc, argv, "dhqvVku" "c:e:", long_options, &option_index); + c = getopt_long(argc, argv, "dhqvVku" "c:e:g:", long_options, &option_index); if (c == -1) { break; } @@ -219,6 +229,9 @@ static void parse_args(int argc, char **argv) case 'd': opt_daemon = 1; break; + case 'g': + tracing_group_name = optarg; + break; case 'h': usage(stdout); exit(EXIT_SUCCESS); @@ -331,7 +344,13 @@ int main(int argc, char **argv) } /* Init */ - lttng_consumer_init(); + if (lttng_consumer_init() < 0) { + goto error; + } + + /* Init socket timeouts */ + lttcomm_init(); + lttcomm_inet_init(); if (!getuid()) { /* Set limit for open files */ @@ -392,9 +411,6 @@ int main(int argc, char **argv) ctx->type = opt_type; - /* Initialize communication library */ - lttcomm_init(); - ret = utils_create_pipe(health_quit_pipe); if (ret < 0) { goto error_health_pipe; @@ -408,6 +424,15 @@ int main(int argc, char **argv) goto health_error; } + /* + * Wait for health thread to be initialized before letting the + * sessiond thread reply to the sessiond that we are ready. + */ + while (uatomic_read(<tng_consumer_ready)) { + usleep(100000); + } + cmm_smp_mb(); /* Read ready before following operations */ + /* Create thread to manage channels */ ret = pthread_create(&channel_thread, NULL, consumer_thread_channel_poll, (void *) ctx); @@ -498,15 +523,11 @@ health_error: error_health_pipe: if (!ret) { ret = EXIT_SUCCESS; - lttng_consumer_send_error(ctx, LTTCOMM_CONSUMERD_EXIT_SUCCESS); goto end; } error: ret = EXIT_FAILURE; - if (ctx) { - lttng_consumer_send_error(ctx, LTTCOMM_CONSUMERD_EXIT_FAILURE); - } end: lttng_consumer_destroy(ctx);