summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-09-11 19:29:55 +0200
committerRobin Gareus <robin@gareus.org>2014-09-11 19:30:33 +0200
commitf3f80900f14ae8f8d577f3eb098b5064d4aa0859 (patch)
tree9be39cf41986f10a099a324b916631c83f8b2c69 /libs/ardour
parent01974b576995b8a67158fb3d416a1ca8ca224cfd (diff)
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...
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/session.cc2
-rw-r--r--libs/ardour/session_midi.cc1
2 files changed, 2 insertions, 1 deletions
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;