summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/disk_io.h1
-rw-r--r--libs/ardour/disk_io.cc10
2 files changed, 11 insertions, 0 deletions
diff --git a/libs/ardour/ardour/disk_io.h b/libs/ardour/ardour/disk_io.h
index e09f25d767..2224978c36 100644
--- a/libs/ardour/ardour/disk_io.h
+++ b/libs/ardour/ardour/disk_io.h
@@ -58,6 +58,7 @@ class LIBARDOUR_API DiskIOProcessor : public Processor
DiskIOProcessor (Session&, const std::string& name, Flag f);
void set_route (boost::shared_ptr<Route>);
+ void drop_route ();
static void set_buffering_parameters (BufferingPreset bp);
diff --git a/libs/ardour/disk_io.cc b/libs/ardour/disk_io.cc
index 40f97cba0a..26be1e0a0f 100644
--- a/libs/ardour/disk_io.cc
+++ b/libs/ardour/disk_io.cc
@@ -388,9 +388,19 @@ DiskIOProcessor::ChannelInfo::~ChannelInfo ()
}
void
+DiskIOProcessor::drop_route ()
+{
+ _route.reset ();
+}
+
+void
DiskIOProcessor::set_route (boost::shared_ptr<Route> r)
{
_route = r;
+
+ if (_route) {
+ _route->DropReferences.connect_same_thread (*this, boost::bind (&DiskIOProcessor::drop_route, this));
+ }
}
/** Get the start, end, and length of a location "atomically".