From 2e8a93948af28e12866f415d40b5c414ad77baf8 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