summaryrefslogtreecommitdiff
path: root/libs/ardour/audioengine.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-06-20 22:24:14 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-06-20 22:24:14 +0000
commit83941f9988c5eef8ac86f180978547b1259ce095 (patch)
tree55c53c8fe9be2070e149533baa473f9235bec6a1 /libs/ardour/audioengine.cc
parentb8d724d57a9602663ba1279f8fea8a8f8e73e593 (diff)
when a session goes away, deliver silence to all current ports to prevent a horrible screech during cleanup/destruction
git-svn-id: svn://localhost/ardour2/branches/3.0@12806 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/audioengine.cc')
-rw-r--r--libs/ardour/audioengine.cc25
1 files changed, 17 insertions, 8 deletions
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index 0f318a1b75..26f8311c8d 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -475,21 +475,30 @@ AudioEngine::process_callback (pframes_t nframes)
return 0;
}
+ if (session_remove_pending) {
+ /* perform the actual session removal */
+ _session = 0;
+ session_remove_pending = false;
+ session_removed.signal();
+ }
+
if (_session == 0) {
if (!_freewheeling) {
MIDI::Manager::instance()->cycle_start(nframes);
MIDI::Manager::instance()->cycle_end();
+
+ boost::shared_ptr<Ports> p = ports.reader();
+
+ for (Ports::iterator i = p->begin(); i != p->end(); ++i) {
+
+ if (i->second->sends_output()) {
+ i->second->get_buffer (nframes).silence (nframes);
+ }
+ }
}
- _processed_frames = next_processed_frames;
- return 0;
- }
- if (session_remove_pending) {
- /* perform the actual session removal */
- _session = 0;
- session_remove_pending = false;
- session_removed.signal();
_processed_frames = next_processed_frames;
+
return 0;
}