summaryrefslogtreecommitdiff
path: root/libs/ardour/session.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2019-10-28 11:15:07 -0600
committerPaul Davis <paul@linuxaudiosystems.com>2019-10-28 13:40:18 -0600
commit7f1134e5509d96bd34364f71e5133cddbb1f3926 (patch)
tree721831ea1149bd2cc28a41c48160824965c1c5c4 /libs/ardour/session.cc
parent5e9e7e6ed4ffa2f45faeaf4f4278821519e6db7b (diff)
move reset (deletion) of click_io and ltc_output objects until after we are disconnected from the engine
We use those objects unconditionally and without caching inside process(), which could be invoked by the engine during their deletion
Diffstat (limited to 'libs/ardour/session.cc')
-rw-r--r--libs/ardour/session.cc9
1 files changed, 4 insertions, 5 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 6d698988f3..c3035d4b5c 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -562,11 +562,6 @@ Session::destroy ()
/* shutdown control surface protocols while we still have ports
* and the engine to move data to any devices.
*/
-
- /* remove I/O objects before unsetting the engine session */
- _click_io.reset ();
- _ltc_output.reset ();
-
ControlProtocolManager::instance().drop_protocols ();
/* stop auto dis/connecting */
@@ -582,6 +577,10 @@ Session::destroy ()
Port::PortDrop (); /* EMIT SIGNAL */
+ /* remove I/O objects that we (the session) own */
+ _click_io.reset ();
+ _ltc_output.reset ();
+
{
Glib::Threads::Mutex::Lock lm (controllables_lock);
for (Controllables::iterator i = controllables.begin(); i != controllables.end(); ++i) {