From d421e56fc0d8fafbaa5a11690c6f7c0d728ed4c4 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 1 Jul 2017 02:22:44 +0200 Subject: 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. --- libs/surfaces/faderport8/faderport8.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'libs/surfaces/faderport8') diff --git a/libs/surfaces/faderport8/faderport8.cc b/libs/surfaces/faderport8/faderport8.cc index 923f635324..50d8a213b0 100644 --- a/libs/surfaces/faderport8/faderport8.cc +++ b/libs/surfaces/faderport8/faderport8.cc @@ -150,6 +150,9 @@ FaderPort8::~FaderPort8 () if (_input_port) { DEBUG_TRACE (DEBUG::FaderPort8, string_compose ("unregistering input port %1\n", boost::shared_ptr(_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 port (wport.lock()); - if (!port) { + if (!port || !_input_port) { return false; } -- cgit v1.2.3