From: Jonathan Rajotte Date: Mon, 14 Feb 2022 16:23:28 +0000 (-0500) Subject: Fix: rotation: hang on destroy when using scheduled rotation based on timer X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=355cf1bddde5167400d32327a36f22169d4b8925;p=deliverable%2Flttng-tools.git Fix: rotation: hang on destroy when using scheduled rotation based on timer 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 --- 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);