From f3f80900f14ae8f8d577f3eb098b5064d4aa0859 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 11 Sep 2014 19:29:55 +0200 Subject: fix crash at session close/exit if a midi-control-surface is used The "real" problem was that MidiControlUI is destroyed while there are still MIDIControllables around that still have a signal connection to a Controllable: controllable->Destroyed(..., MidiControlUI::instance()) If a Contrallable is deleted after the MidiControlUI event loop is gone, the Destroyed() signal can create odd situations... --- libs/ardour/session.cc | 2 +- libs/ardour/session_midi.cc | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'libs') diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index dba519f660..5bc609356a 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -490,7 +490,6 @@ Session::destroy () delete _butler; _butler = 0; - delete midi_control_ui; delete _all_route_group; DEBUG_TRACE (DEBUG::Destruction, "delete route groups\n"); @@ -567,6 +566,7 @@ Session::destroy () playlists.reset (); delete _scene_changer; _scene_changer = 0; + delete midi_control_ui; midi_control_ui = 0; delete _mmc; _mmc = 0; delete _midi_ports; _midi_ports = 0; diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc index 639ea399d3..47c7bd4c40 100644 --- a/libs/ardour/session_midi.cc +++ b/libs/ardour/session_midi.cc @@ -597,6 +597,7 @@ Session::send_song_position_pointer (framepos_t) int Session::start_midi_thread () { + if (midi_control_ui) { return 0; } midi_control_ui = new MidiControlUI (*this); midi_control_ui->run (); return 0; -- cgit v1.2.3