summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/audio_diskstream.cc2
-rw-r--r--libs/ardour/midi_diskstream.cc1
-rw-r--r--libs/ardour/session.cc2
3 files changed, 3 insertions, 2 deletions
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> source)
Analyser::queue_source_for_analysis (source, false);
}
}
+
+ source->DropReferences.connect_same_thread (*this, boost::bind (&Session::remove_source, this, boost::weak_ptr<Source> (source)));
}
}