fix crash initiated by never configuring track write sources when reloading a session...
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 9 Jul 2014 16:03:22 +0000 (12:03 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 9 Jul 2014 16:03:22 +0000 (12:03 -0400)
libs/ardour/audio_diskstream.cc

index e0086fa2950d5b0919b0d39741999d1444584927..ea5a7e6bfaba6dc3fa6cb6a4b300d3f88e198944 100644 (file)
@@ -148,7 +148,7 @@ AudioDiskstream::free_working_buffers()
 void
 AudioDiskstream::non_realtime_input_change ()
 {
-       bool need_new_write_sources = false;
+       bool need_write_sources = false;
 
        {
                Glib::Threads::Mutex::Lock lm (state_lock);
@@ -157,6 +157,12 @@ AudioDiskstream::non_realtime_input_change ()
                        return;
                }
 
+               boost::shared_ptr<ChannelList> cr = channels.reader();
+               if (!cr->empty() && !cr->front()->write_source) {
+                       need_write_sources = true;
+                       cerr << name() << " no write sources!\n";
+               }
+
                if (input_change_pending.type == IOChange::ConfigurationChanged) {
                        RCUWriter<ChannelList> writer (channels);
                        boost::shared_ptr<ChannelList> c = writer.get_copy();
@@ -169,7 +175,7 @@ AudioDiskstream::non_realtime_input_change ()
                                remove_channel_from (c, _n_channels.n_audio() - _io->n_ports().n_audio());
                        }
 
-                       need_new_write_sources = true;
+                       need_write_sources = true;
                }
 
                if (input_change_pending.type & IOChange::ConnectionsChanged) {
@@ -183,7 +189,7 @@ AudioDiskstream::non_realtime_input_change ()
                /* implicit unlock */
        }
 
-       if (need_new_write_sources) {
+       if (need_write_sources) {
                reset_write_sources (false);
        }