X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmain.c;h=4968ee2a937194d2f344fa6a2b232656eec6acc9;hb=6d9a9c6575be8bcf86f404236a0f4a78b4889881;hp=cec3a504a01371aed72f81f419f43a66539ba162;hpb=329f344308786acb81d8939eb8e1ad37307696c2;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index cec3a504a..4968ee2a9 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -595,7 +595,8 @@ static void sessiond_cleanup(void) /* Cleanup ALL session */ cds_list_for_each_entry_safe(sess, stmp, &session_list_ptr->head, list) { - cmd_destroy_session(sess, kernel_poll_pipe[1]); + cmd_destroy_session(sess, kernel_poll_pipe[1], + notification_thread_handle); } } @@ -3771,7 +3772,8 @@ error_add_context: } case LTTNG_DESTROY_SESSION: { - ret = cmd_destroy_session(cmd_ctx->session, kernel_poll_pipe[1]); + ret = cmd_destroy_session(cmd_ctx->session, kernel_poll_pipe[1], + notification_thread_handle); /* Set session to NULL so we do not unlock it after free. */ cmd_ctx->session = NULL; @@ -4200,13 +4202,12 @@ error_add_context: ret = cmd_rotation_set_schedule(cmd_ctx->session, cmd_ctx->lsm->u.rotate_setup.timer_us, - cmd_ctx->lsm->u.rotate_setup.size); - if (ret < 0) { - ret = -ret; + cmd_ctx->lsm->u.rotate_setup.size, + notification_thread_handle); + if (ret != LTTNG_OK) { goto error; } - ret = LTTNG_OK; break; } case LTTNG_ROTATION_SCHEDULE_GET_TIMER_PERIOD: @@ -4928,7 +4929,7 @@ static int set_option(int opt, const char *arg, const char *optname) } else if (string_match(optname, "no-kernel")) { config.no_kernel = true; } else if (string_match(optname, "quiet") || opt == 'q') { - lttng_opt_quiet = true; + config.quiet = true; } else if (string_match(optname, "verbose") || opt == 'v') { /* Verbose level can increase using multiple -v */ if (arg) { @@ -5709,6 +5710,7 @@ int main(int argc, char **argv) struct timer_thread_parameters timer_thread_ctx; /* Queue of rotation jobs populated by the sessiond-timer. */ struct rotation_thread_timer_queue *rotation_timer_queue = NULL; + sem_t notification_thread_ready; init_kernel_workarounds(); @@ -6116,11 +6118,19 @@ int main(int argc, char **argv) goto exit_health; } + /* + * The rotation thread needs the notification thread to be ready before + * creating the rotate_notification_channel, so we use this semaphore as + * a rendez-vous point. + */ + sem_init(¬ification_thread_ready, 0, 0); + /* notification_thread_data acquires the pipes' read side. */ notification_thread_handle = notification_thread_handle_create( ust32_channel_monitor_pipe, ust64_channel_monitor_pipe, - kernel_channel_monitor_pipe); + kernel_channel_monitor_pipe, + ¬ification_thread_ready); if (!notification_thread_handle) { retval = -1; ERR("Failed to create notification thread shared data"); @@ -6158,7 +6168,9 @@ int main(int argc, char **argv) ust64_channel_rotate_pipe, kernel_channel_rotate_pipe, thread_quit_pipe[0], - rotation_timer_queue); + rotation_timer_queue, + notification_thread_handle, + ¬ification_thread_ready); if (!rotation_thread_handle) { retval = -1; ERR("Failed to create rotation thread shared data"); @@ -6346,6 +6358,7 @@ exit_dispatch: exit_client: exit_rotation: exit_notification: + sem_destroy(¬ification_thread_ready); ret = pthread_join(health_thread, &status); if (ret) { errno = ret;