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/?p=lttng-tools.git;a=commitdiff_plain;h=3cf0ebeef90a629c59333544a9fb3bd75f2dbfc6;hp=c7031a2c707646804e0088d069578d5eb74fc01e 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,