From 355cf1bddde5167400d32327a36f22169d4b8925 Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Mon, 14 Feb 2022 11:23:28 -0500 Subject: [PATCH] Fix: rotation: hang on destroy when using scheduled rotation based on timer MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Observed issue ============== The following scenario results in a hang for `lttng destroy`: lttng create test lttng enable-event -u -a lttng enable-rotation --timer 100000 lttng start lttng stop lttng start lttng destroy Cause ===== There is an imbalance in how many times we start the rotation timer. The rotation timer is only removed on `lttng destroy` or when disabling a time-based-rotation. On the other hand, the timer is "started" on `lttng start` and when enabling a time based rotation. The imbalance emerging from a start/stop/start sequence would prevent the teardown of the session object since each time the timer is started a reference to the session is held. Solution ======== Do not start the rotation schedule timer if it was already launched. Known drawbacks ========= None. Change-Id: Ic5b8938166358fe7629187bebdf02a09e90846c0 Signed-off-by: Jonathan Rajotte Signed-off-by: Jérémie Galarneau --- src/bin/lttng-sessiond/cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/lttng-sessiond/cmd.cpp b/src/bin/lttng-sessiond/cmd.cpp index 0ca7f2172..0e9821eb6 100644 --- a/src/bin/lttng-sessiond/cmd.cpp +++ b/src/bin/lttng-sessiond/cmd.cpp @@ -2818,7 +2818,7 @@ int cmd_start_trace(struct ltt_session *session) */ session->rotated_after_last_stop = false; - if (session->rotate_timer_period) { + if (session->rotate_timer_period && !session->rotation_schedule_timer_enabled) { int int_ret = timer_session_rotation_schedule_timer_start( session, session->rotate_timer_period); -- 2.34.1