X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmain.c;h=cedd35611c6ba4ecdca0039b2de79364a7f27dab;hb=a79d84dd6bf849361c34616ae9f60786c6a6bf20;hp=cf15ff9b02a4aec563614c699ec161f221f270ee;hpb=06f525de3c141168b3bc367a9b87b35d7709abf5;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index cf15ff9b0..cedd35611 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -412,6 +412,7 @@ static void cleanup(void) ERR("Unable to clean %s", rundir); } free(cmd); + free(rundir); DBG("Cleaning up all sessions"); @@ -837,6 +838,25 @@ static void *thread_manage_consumer(void *data) DBG("[thread] Manage consumer started"); + /* + * Since the consumer thread can be spawned at any moment in time, we init + * the health to a poll status (1, which is a valid health over time). + * When the thread starts, we update here the health to a "code" path being + * an even value so this thread, when reaching a poll wait, does not + * trigger an error with an even value. + * + * Here is the use case we avoid. + * + * +1: the first poll update during initialization (main()) + * +2 * x: multiple code update once in this thread. + * +1: poll wait in this thread (being a good health state). + * == even number which after the wait period shows as a bad health. + * + * In a nutshell, the following poll update to the health state brings back + * the state to an even value meaning a code path. + */ + health_poll_update(&consumer_data->health); + health_code_update(&consumer_data->health); ret = lttcomm_listen_unix_sock(consumer_data->err_sock); @@ -2114,7 +2134,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock, case LTTNG_LIST_DOMAINS: case LTTNG_START_TRACE: case LTTNG_STOP_TRACE: - case LTTNG_DATA_AVAILABLE: + case LTTNG_DATA_PENDING: need_domain = 0; break; default: @@ -2809,9 +2829,9 @@ skip_domain: bytecode); break; } - case LTTNG_DATA_AVAILABLE: + case LTTNG_DATA_PENDING: { - ret = cmd_data_available(cmd_ctx->session); + ret = cmd_data_pending(cmd_ctx->session); break; } default: @@ -3976,7 +3996,9 @@ int main(int argc, char **argv) /* * Init health counters of the consumer thread. We do a quick hack here to * the state of the consumer health is fine even if the thread is not - * started. This is simply to ease our life and has no cost what so ever. + * started. Once the thread starts, the health state is updated with a poll + * value to set a health code path. This is simply to ease our life and has + * no cost what so ever. */ health_init(&kconsumer_data.health); health_poll_update(&kconsumer_data.health); @@ -3985,9 +4007,6 @@ int main(int argc, char **argv) health_init(&ustconsumer64_data.health); health_poll_update(&ustconsumer64_data.health); - /* Not needed anymore. */ - free(rundir); - /* Create thread to manage the client socket */ ret = pthread_create(&health_thread, NULL, thread_manage_health, (void *) NULL);