summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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) {