From 3cf0ebeef90a629c59333544a9fb3bd75f2dbfc6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Wed, 21 Nov 2018 18:09:52 -0500 Subject: [PATCH] Fix: mark rotation pending check timer is never marked as disabled MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/bin/lttng-sessiond/timer.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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, -- 2.34.1