properly handle port removal in route.
authorRobin Gareus <robin@gareus.org>
Sat, 3 Aug 2013 01:44:51 +0000 (03:44 +0200)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 8 Aug 2013 19:26:19 +0000 (15:26 -0400)
bug:
 - add midi track
 - add additional midi port
 - remove additional midi port
 - press play
 -> crash

because..

ARDOUR::MidiTrack::roll's route_buffer still has 2 midi-channels. This is
because processor_max_streams was not updated (no plugins added/removed)
fill_buffers_with_input() eventually asserts when trying to get the 2nd
(nonexistant) midi port via ARDOUR::PortSet::nth_midi_port() in
 ARDOUR::PortSet::port().

libs/ardour/route.cc

index 77e538cfe9691903502424d962d9cb6798b72135..2e1517fe21a0307452e87f359f433335031c6cc7 100644 (file)
@@ -1708,6 +1708,7 @@ Route::configure_processors_unlocked (ProcessorStreams* err)
        ChanCount out;
        bool seen_mains_out = false;
        processor_out_streams = _input->n_ports();
+       processor_max_streams.reset();
 
        list< pair<ChanCount,ChanCount> >::iterator c = configuration.begin();
        for (ProcessorList::iterator p = _processors.begin(); p != _processors.end(); ++p, ++c) {