diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc index 8a161c3977..2c0dcb3e97 100644 --- a/libs/ardour/audio_diskstream.cc +++ b/libs/ardour/audio_diskstream.cc @@ -1404,7 +1404,6 @@ AudioDiskstream::transport_stopped_wallclock (struct tm& when, time_t twhen, boo (*chan)->write_source->mark_for_remove (); (*chan)->write_source->drop_references (); - _session.remove_source ((*chan)->write_source); (*chan)->write_source.reset (); } @@ -1963,7 +1962,6 @@ AudioDiskstream::reset_write_sources (bool mark_write_complete, bool /*force*/) if ((*chan)->write_source->removable()) { (*chan)->write_source->mark_for_remove (); (*chan)->write_source->drop_references (); - _session.remove_source ((*chan)->write_source); } (*chan)->write_source.reset (); diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc index 89a497cf01..abde495288 100644 --- a/libs/ardour/midi_diskstream.cc +++ b/libs/ardour/midi_diskstream.cc @@ -943,6 +943,7 @@ MidiDiskstream::transport_stopped_wallclock (struct tm& /*when*/, time_t /*twhen if (_write_source) { _write_source->mark_for_remove (); + _write_source->drop_references (); _write_source.reset(); } diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index b6b238a398..cc791af862 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -2676,6 +2676,8 @@ Session::add_source (boost::shared_ptr source) Analyser::queue_source_for_analysis (source, false); } } + + source->DropReferences.connect_same_thread (*this, boost::bind (&Session::remove_source, this, boost::weak_ptr (source))); } }