X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=ltt-sessiond%2Fmain.c;h=97db535d142b16f802e9e80c77a19ef094097d5a;hp=68481146eb1badc3bc30c2810448434013ac50a5;hb=c49dc785799508e445e3e386c87f8151eef3c34c;hpb=712ea556b2774ad12e9a9a83c3d04eda46e3f9a0 diff --git a/ltt-sessiond/main.c b/ltt-sessiond/main.c index 68481146e..97db535d1 100644 --- a/ltt-sessiond/main.c +++ b/ltt-sessiond/main.c @@ -486,12 +486,14 @@ static pid_t spawn_kconsumerd(void) int ret; pid_t pid; + DBG("Spawning kconsumerd"); + pid = fork(); if (pid == 0) { /* * Exec kconsumerd. */ - execlp("kconsumerd", "kconsumerd", "--daemonize", NULL); + execlp("kconsumerd", "kconsumerd", "--quiet", NULL); if (errno != 0) { perror("kernel start consumer exec"); } @@ -518,21 +520,21 @@ static int start_kconsumerd(void) { int ret; - DBG("Spawning kconsumerd"); - pthread_mutex_lock(&kconsumerd_pid_mutex); - if (kconsumerd_pid == 0) { - ret = spawn_kconsumerd(); - if (ret < 0) { - ERR("Spawning kconsumerd failed"); - ret = LTTCOMM_KERN_CONSUMER_FAIL; - pthread_mutex_unlock(&kconsumerd_pid_mutex); - goto error; - } + if (kconsumerd_pid != 0) { + goto end; + } - /* Setting up the global kconsumerd_pid */ - kconsumerd_pid = ret; + ret = spawn_kconsumerd(); + if (ret < 0) { + ERR("Spawning kconsumerd failed"); + ret = LTTCOMM_KERN_CONSUMER_FAIL; + pthread_mutex_unlock(&kconsumerd_pid_mutex); + goto error; } + + /* Setting up the global kconsumerd_pid */ + kconsumerd_pid = ret; pthread_mutex_unlock(&kconsumerd_pid_mutex); DBG("Kconsumerd pid %d", ret); @@ -544,6 +546,8 @@ static int start_kconsumerd(void) goto error; } +end: + pthread_mutex_unlock(&kconsumerd_pid_mutex); return 0; error: @@ -658,6 +662,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx) switch (cmd_ctx->lsm->cmd_type) { case LTTNG_CREATE_SESSION: case LTTNG_LIST_SESSIONS: + case KERNEL_LIST_EVENTS: case UST_LIST_APPS: break; default: @@ -676,6 +681,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx) case KERNEL_CREATE_STREAM: case KERNEL_DISABLE_EVENT: case KERNEL_ENABLE_EVENT: + case KERNEL_LIST_EVENTS: case KERNEL_OPEN_METADATA: case KERNEL_START_TRACE: case KERNEL_STOP_TRACE: @@ -761,6 +767,34 @@ static int process_client_msg(struct command_ctx *cmd_ctx) ret = LTTCOMM_OK; break; } + case KERNEL_LIST_EVENTS: + { + char *event_list; + ssize_t size; + + size = kernel_list_events(kernel_tracer_fd, &event_list); + if (size < 0) { + ret = LTTCOMM_KERN_LIST_FAIL; + goto error; + } + + /* + * Setup lttng message with payload size set to the event list size in + * bytes and then copy list into the llm payload. + */ + ret = setup_lttng_msg(cmd_ctx, size); + if (ret < 0) { + goto setup_error; + } + + /* Copy event list into message payload */ + memcpy(cmd_ctx->llm->payload, event_list, size); + + free(event_list); + + ret = LTTCOMM_OK; + break; + } case KERNEL_OPEN_METADATA: { /* Setup lttng message with no payload */ @@ -1381,8 +1415,12 @@ static int create_lttng_rundir(void) ret = mkdir(LTTNG_RUNDIR, S_IRWXU | S_IRWXG ); if (ret < 0) { - ERR("Unable to create " LTTNG_RUNDIR); - goto error; + if (errno != EEXIST) { + ERR("Unable to create " LTTNG_RUNDIR); + goto error; + } else { + ret = 0; + } } error: