summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-09-03 05:17:16 +0200
committerRobin Gareus <robin@gareus.org>2014-09-03 05:20:28 +0200
commit07a651d2ec0590ad8315de0fd43492b7238af908 (patch)
treeb5af4b3ab44fda8ee59f012c494d0624701aac7b /libs
parentf684cc24ecdae0dea1467df7ae5eea3d16868bd5 (diff)
release shared route pointer kept by InternalSend when dropping refs.
fixes "SessionHandleRef exists across session deletion" when using AuxSends
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/internal_send.h2
-rw-r--r--libs/ardour/internal_send.cc7
2 files changed, 9 insertions, 0 deletions
diff --git a/libs/ardour/ardour/internal_send.h b/libs/ardour/ardour/internal_send.h
index 6feeb35c6d..71d8049cae 100644
--- a/libs/ardour/ardour/internal_send.h
+++ b/libs/ardour/ardour/internal_send.h
@@ -65,8 +65,10 @@ class LIBARDOUR_API InternalSend : public Send
boost::shared_ptr<Route> _send_to;
PBD::ID _send_to_id;
PBD::ScopedConnection connect_c;
+ PBD::ScopedConnection source_connection;
PBD::ScopedConnectionList target_connections;
+ void send_from_going_away ();
void send_to_going_away ();
void send_to_property_changed (const PBD::PropertyChange&);
int connect_when_legal ();
diff --git a/libs/ardour/internal_send.cc b/libs/ardour/internal_send.cc
index e5c7232f48..33b299dfee 100644
--- a/libs/ardour/internal_send.cc
+++ b/libs/ardour/internal_send.cc
@@ -58,6 +58,7 @@ InternalSend::InternalSend (Session& s,
init_gain ();
+ _send_from->DropReferences.connect_same_thread (source_connection, boost::bind (&InternalSend::send_from_going_away, this));
CycleStart.connect_same_thread (*this, boost::bind (&InternalSend::cycle_start, this, _1));
}
@@ -118,6 +119,12 @@ InternalSend::target_io_changed ()
}
void
+InternalSend::send_from_going_away ()
+{
+ _send_from.reset();
+}
+
+void
InternalSend::send_to_going_away ()
{
target_connections.drop_connections ();