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.
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 ();
}
{
boost::shared_ptr<AsyncMIDIPort> port (wport.lock());
- if (!port) {
+ if (!port || !_input_port) {
return false;
}