From fa6fbbf810d5f7deffc1b90fe959c6d1e219ba1c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 11 Jul 2024 19:19:21 +0200 Subject: [PATCH] Fix ctrl surface shutdown sequence Tear down GUI before stopping event loop, this fixes a crash on windows (and perhaps a rare crash on other OS). --- libs/surfaces/console1/console1.cc | 4 ++-- libs/surfaces/generic_midi/generic_midi_control_protocol.cc | 3 ++- libs/surfaces/launchpad_pro/lppro.cc | 2 +- libs/surfaces/launchpad_x/lpx.cc | 2 +- libs/surfaces/osc/osc.cc | 3 ++- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/libs/surfaces/console1/console1.cc b/libs/surfaces/console1/console1.cc index ba460f2e5c..3250371079 100644 --- a/libs/surfaces/console1/console1.cc +++ b/libs/surfaces/console1/console1.cc @@ -61,11 +61,11 @@ Console1::~Console1 () { all_lights_out (); + tear_down_gui (); + stop_event_loop (); MIDISurface::drop (); - tear_down_gui (); - for (const auto& b : buttons) { delete b.second; } diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc index 6f9c6f4183..697f2c8c10 100644 --- a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc +++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc @@ -167,7 +167,6 @@ GenericMidiControlProtocol::~GenericMidiControlProtocol () } drop_all (); - tear_down_gui (); } list > @@ -300,6 +299,7 @@ GenericMidiControlProtocol::do_request (GenericMIDIRequest* req) int GenericMidiControlProtocol::stop () { + tear_down_gui (); BaseUI::quit (); return 0; @@ -328,6 +328,7 @@ GenericMidiControlProtocol::set_active (bool yn) if (yn) { BaseUI::run (); } else { + tear_down_gui (); BaseUI::quit (); } diff --git a/libs/surfaces/launchpad_pro/lppro.cc b/libs/surfaces/launchpad_pro/lppro.cc index d234cac54c..b71ae802f3 100644 --- a/libs/surfaces/launchpad_pro/lppro.cc +++ b/libs/surfaces/launchpad_pro/lppro.cc @@ -189,8 +189,8 @@ LaunchPadPro::~LaunchPadPro () p.second.timeout_connection.disconnect (); } - stop_event_loop (); tear_down_gui (); + stop_event_loop (); MIDISurface::drop (); diff --git a/libs/surfaces/launchpad_x/lpx.cc b/libs/surfaces/launchpad_x/lpx.cc index 600e5e117c..6121d4957a 100644 --- a/libs/surfaces/launchpad_x/lpx.cc +++ b/libs/surfaces/launchpad_x/lpx.cc @@ -193,8 +193,8 @@ LaunchPadX::~LaunchPadX () p.second.timeout_connection.disconnect (); } - stop_event_loop (); tear_down_gui (); + stop_event_loop (); MIDISurface::drop (); diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 9eb60147f4..11e7c5fae9 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -138,7 +138,6 @@ OSC::~OSC() { tick = false; stop (); - tear_down_gui (); _instance = 0; } @@ -315,6 +314,8 @@ OSC::thread_init () int OSC::stop () { + tear_down_gui (); + periodic_connection.disconnect (); session_connections.drop_connections ();