From bf30a058eebd1b823d9d9243c07de86261c954d0 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Mon, 2 Nov 2020 19:05:19 +0100 Subject: [PATCH] fix crash on deleting scene sequences This crash could occur when a scene sequence was currently in progress and the entries were changed while in the 'wait for ...' state. --- src/switch-sequence.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/switch-sequence.cpp b/src/switch-sequence.cpp index d49e0416..33e40375 100644 --- a/src/switch-sequence.cpp +++ b/src/switch-sequence.cpp @@ -30,10 +30,19 @@ void AdvSceneSwitcher::on_sceneSequenceRemove_clicked() return; { + // might be in waiting state of sequence + // causing invalid access to after wakeup + // thus we need to stop the main thread before delete + bool wasRunning = !switcher->stop; + switcher->Stop(); + std::lock_guard lock(switcher->m); int idx = ui->sceneSequenceSwitches->currentRow(); auto &switches = switcher->sceneSequenceSwitches; switches.erase(switches.begin() + idx); + + if (wasRunning) + switcher->Start(); } delete item; @@ -119,6 +128,10 @@ void AdvSceneSwitcher::on_sceneSequenceLoad_clicked() Msgbox.exec(); return; } + + // might be in waiting state of sequence + // causing invalid access to after wakeup + // thus we need to stop the main thread before delete bool wasRunning = !switcher->stop; switcher->Stop();