From: Jérémie Galarneau Date: Wed, 21 Nov 2018 23:09:52 +0000 (-0500) Subject: Fix: mark rotation pending check timer is never marked as disabled X-Git-Tag: v2.12.0-rc1~735 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=3cf0ebeef90a629c59333544a9fb3bd75f2dbfc6;p=lttng-tools.git Fix: mark rotation pending check timer is never marked as disabled The rotation pending check timer is launched in "one-shot" mode. However, it is marked as enabled for the whole duration of the rotation pending check phase. This change ensures that the timer is marked as disabled when the session rotation pending reaches the "completed" state. Signed-off-by: Jérémie Galarneau --- diff --git a/src/bin/lttng-sessiond/timer.c b/src/bin/lttng-sessiond/timer.c index 4bff7bd76..d70d16710 100644 --- a/src/bin/lttng-sessiond/timer.c +++ b/src/bin/lttng-sessiond/timer.c @@ -248,6 +248,7 @@ int timer_session_rotation_pending_check_stop(struct ltt_session *session) int ret; assert(session); + assert(session->rotation_pending_check_timer_enabled); DBG("Disabling session rotation pending check timer on session %" PRIu64, session->id); @@ -387,11 +388,14 @@ void *timer_thread_func(void *data) struct ltt_session *session = (struct ltt_session *) info.si_value.sival_ptr; + session_lock_list(); + session_lock(session); + /* Acquires a reference to the session. */ rotation_thread_enqueue_job(ctx->rotation_thread_job_queue, ROTATION_THREAD_JOB_TYPE_CHECK_PENDING_ROTATION, session); - session_lock_list(); - session_put(session); + /* Release the timer's reference to the session. */ + (void) timer_session_rotation_pending_check_stop(session); session_unlock_list(); } else if (signr == LTTNG_SESSIOND_SIG_SCHEDULED_ROTATION) { rotation_thread_enqueue_job(ctx->rotation_thread_job_queue,