summaryrefslogtreecommitdiff
path: root/libs/ardour/session.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-04-01 13:14:17 +0200
committerRobin Gareus <robin@gareus.org>2017-04-01 13:14:17 +0200
commit727ac30dd2218f73f4d1b097820ec67f716cf40a (patch)
treed2feb18d66aefa07ad264328950c80e7aa76b625 /libs/ardour/session.cc
parentd61683809d766a3eee442a038f942a3e3f96c352 (diff)
Unregister ports at session close.
This fixes issues when re-loading a session without taking the engine down.
Diffstat (limited to 'libs/ardour/session.cc')
-rw-r--r--libs/ardour/session.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index f55e95486e..eb8e233993 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -625,7 +625,7 @@ Session::destroy ()
ControlProtocolManager::instance().drop_protocols ();
- /* stop autoconnecting */
+ /* stop auto dis/connecting */
auto_connect_thread_terminate ();
MIDI::Name::MidiPatchManager::instance().remove_search_path(session_directory().midi_patch_path());
@@ -807,6 +807,14 @@ Session::destroy ()
}
}
+ {
+ /* unregister all dropped ports, process pending port deletion. */
+ // this may call ARDOUR::Port::drop ... jack_port_unregister ()
+ // jack1 cannot cope with removing ports while processing
+ Glib::Threads::Mutex::Lock lm (AudioEngine::instance()->process_lock ());
+ AudioEngine::instance()->clear_pending_port_deletions ();
+ }
+
DEBUG_TRACE (DEBUG::Destruction, "Session::destroy() done\n");
BOOST_SHOW_POINTERS ();