Fix: mark rotation pending check timer is never marked as disabled
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 21 Nov 2018 23:09:52 +0000 (18:09 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 3 Dec 2018 00:41:01 +0000 (19:41 -0500)
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 <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/timer.c

index 4bff7bd76cea0497c311f12b7026b0142761710c..d70d16710c91e7200f1a0c78f078e3d68a00c201 100644 (file)
@@ -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,
This page took 0.036456 seconds and 5 git commands to generate.