channel config changes during ::configure_io() must be scoped to ensure they are...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 25 Jul 2017 16:57:07 +0000 (12:57 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 18 Sep 2017 15:40:53 +0000 (11:40 -0400)
libs/ardour/disk_io.cc

index ff6ad0adf29b2faab9fe18446c1bb95b81195d75..58e8790942510fb1310e4f56e5351bebdff5cdd1 100644 (file)
@@ -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) {