/* 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) {
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");
"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 "
{ "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' },
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;
}
case 'd':
opt_daemon = 1;
break;
+ case 'g':
+ tracing_group_name = optarg;
+ break;
case 'h':
usage(stdout);
exit(EXIT_SUCCESS);
}
/* 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 */
ctx->type = opt_type;
- /* Initialize communication library */
- lttcomm_init();
-
ret = utils_create_pipe(health_quit_pipe);
if (ret < 0) {
goto error_health_pipe;
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)) {
+ sleep(1);
+ }
+ 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);