From 0ff3933dade5bbd7cb4a8ddbbd2a951e47a6b668 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 21 Jun 2017 12:54:39 -0400 Subject: [PATCH] drop route shared_ptr when Route::GoingAway is emitted --- libs/ardour/ardour/disk_io.h | 1 + libs/ardour/disk_io.cc | 10 ++++++++++ 2 files changed, 11 insertions(+) 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); + 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 @@ -387,10 +387,20 @@ DiskIOProcessor::ChannelInfo::~ChannelInfo () capture_transition_buf = 0; } +void +DiskIOProcessor::drop_route () +{ + _route.reset (); +} + void DiskIOProcessor::set_route (boost::shared_ptr 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".