summaryrefslogtreecommitdiff
path: root/libs/ardour/disk_io.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2017-07-25 12:57:07 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2017-09-18 11:40:53 -0400
commit8f4d432d73901700f6f4fc661305e7e5f37e42c2 (patch)
treef8f494f6d07839d85d83f45f7a0ea3274aa4bc7d /libs/ardour/disk_io.cc
parentece52d3278935a8943936696ef09003f81998ef2 (diff)
channel config changes during ::configure_io() must be scoped to ensure they are complete before signals are sent
Diffstat (limited to 'libs/ardour/disk_io.cc')
-rw-r--r--libs/ardour/disk_io.cc25
1 files changed, 15 insertions, 10 deletions
diff --git a/libs/ardour/disk_io.cc b/libs/ardour/disk_io.cc
index ff6ad0adf2..58e8790942 100644
--- a/libs/ardour/disk_io.cc
+++ b/libs/ardour/disk_io.cc
@@ -147,18 +147,23 @@ DiskIOProcessor::configure_io (ChanCount in, ChanCount out)
{
DEBUG_TRACE (DEBUG::DiskIO, string_compose ("Configuring %1 for in:%2 out:%3\n", name(), in, out));
- RCUWriter<ChannelList> writer (channels);
- boost::shared_ptr<ChannelList> c = writer.get_copy();
-
- uint32_t n_audio = in.n_audio();
bool changed = false;
- if (n_audio > c->size()) {
- add_channel_to (c, n_audio - c->size());
- changed = true;
- } else if (n_audio < c->size()) {
- remove_channel_from (c, c->size() - n_audio);
- changed = true;
+ {
+ RCUWriter<ChannelList> writer (channels);
+ boost::shared_ptr<ChannelList> c = writer.get_copy();
+
+ uint32_t n_audio = in.n_audio();
+
+ if (n_audio > c->size()) {
+ add_channel_to (c, n_audio - c->size());
+ changed = true;
+ } else if (n_audio < c->size()) {
+ remove_channel_from (c, c->size() - n_audio);
+ changed = true;
+ }
+
+ /* writer leaves scope, actual channel list is updated */
}
if (in.n_midi() > 0 && !_midi_buf) {