diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2012-06-20 22:24:14 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2012-06-20 22:24:14 +0000 |
commit | 83941f9988c5eef8ac86f180978547b1259ce095 (patch) | |
tree | 55c53c8fe9be2070e149533baa473f9235bec6a1 /libs/ardour/audioengine.cc | |
parent | b8d724d57a9602663ba1279f8fea8a8f8e73e593 (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.cc | 25 |
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; } |