summaryrefslogtreecommitdiff
path: root/libs/ardour/port.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-04-24 00:24:43 +0200
committerRobin Gareus <robin@gareus.org>2016-04-24 00:24:43 +0200
commitf8936ebcb1b8c95bfa5969ac92cfbde87023778c (patch)
tree83830fe4728decfaf02940d1a708a1789f414318 /libs/ardour/port.cc
parent2a7a64a8738413df27e494e67c31695a429f6edc (diff)
Disconnect Signals before dropping ports
significantly speeds up session close
Diffstat (limited to 'libs/ardour/port.cc')
-rw-r--r--libs/ardour/port.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/libs/ardour/port.cc b/libs/ardour/port.cc
index dcb3e2ff4a..7888167a70 100644
--- a/libs/ardour/port.cc
+++ b/libs/ardour/port.cc
@@ -38,6 +38,7 @@ using namespace PBD;
PBD::Signal2<void,boost::shared_ptr<Port>, boost::shared_ptr<Port> > Port::PostDisconnect;
PBD::Signal0<void> Port::PortDrop;
+PBD::Signal0<void> Port::PortSignalDrop;
bool Port::_connecting_blocked = false;
pframes_t Port::_global_port_buffer_offset = 0;
@@ -75,6 +76,7 @@ Port::Port (std::string const & n, DataType t, PortFlags f)
}
PortDrop.connect_same_thread (drop_connection, boost::bind (&Port::drop, this));
+ PortSignalDrop.connect_same_thread (drop_connection, boost::bind (&Port::signal_drop, this));
port_manager->PortConnectedOrDisconnected.connect_same_thread (engine_connection,
boost::bind (&Port::port_connected_or_disconnected, this, _1, _3, _5));
}
@@ -119,6 +121,12 @@ Port::set_pretty_name(const std::string& n)
}
void
+Port::signal_drop ()
+{
+ engine_connection.disconnect ();
+}
+
+void
Port::drop ()
{
if (_port_handle) {