fix crash initiated by never configuring track write sources when reloading a session, caused by earlier commits to avoid unnecessary write source resets

This commit is contained in:
Paul Davis 2014-07-09 12:03:22 -04:00
parent f2699194d3
commit 3fae5f15af

View file

@ -148,7 +148,7 @@ AudioDiskstream::free_working_buffers()
void void
AudioDiskstream::non_realtime_input_change () AudioDiskstream::non_realtime_input_change ()
{ {
bool need_new_write_sources = false; bool need_write_sources = false;
{ {
Glib::Threads::Mutex::Lock lm (state_lock); Glib::Threads::Mutex::Lock lm (state_lock);
@ -157,6 +157,12 @@ AudioDiskstream::non_realtime_input_change ()
return; 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) { if (input_change_pending.type == IOChange::ConfigurationChanged) {
RCUWriter<ChannelList> writer (channels); RCUWriter<ChannelList> writer (channels);
boost::shared_ptr<ChannelList> c = writer.get_copy(); 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()); 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) { if (input_change_pending.type & IOChange::ConnectionsChanged) {
@ -183,7 +189,7 @@ AudioDiskstream::non_realtime_input_change ()
/* implicit unlock */ /* implicit unlock */
} }
if (need_new_write_sources) { if (need_write_sources) {
reset_write_sources (false); reset_write_sources (false);
} }