FP8: Clear input port on close. Fixes crash when switching snapshots

The midi_input_handler for the AsyncMIDIPort is connected to the
main event-loop. Events may still be delivered after the surface was
destroyed.

That by itself is not harmful, unless a given message produces a reply:
The _output_port is already gone, FaderPort8::tx_midi crashes.
This commit is contained in:
Robin Gareus 2017-07-01 02:22:44 +02:00
parent f7452c2a3a
commit d421e56fc0
1 changed files with 4 additions and 1 deletions

View File

@ -150,6 +150,9 @@ FaderPort8::~FaderPort8 ()
if (_input_port) {
DEBUG_TRACE (DEBUG::FaderPort8, string_compose ("unregistering input port %1\n", boost::shared_ptr<ARDOUR::Port>(_input_port)->name()));
_input_port->disconnect_all ();
_input_port->drain (5000, 50000);
_input_port->clear ();
AudioEngine::instance()->unregister_port (_input_port);
_input_port.reset ();
}
@ -461,7 +464,7 @@ FaderPort8::midi_input_handler (Glib::IOCondition ioc, boost::weak_ptr<ARDOUR::A
{
boost::shared_ptr<AsyncMIDIPort> port (wport.lock());
if (!port) {
if (!port || !_input_port) {
return false;
}