summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_ui.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-04-26 04:02:58 +0200
committerRobin Gareus <robin@gareus.org>2016-04-26 04:02:58 +0200
commit7cbc6cf8a253efd3dc30f692c8b68c9c9269ead2 (patch)
tree5a5a45d7923a2820fe0085d8fb014c2357f7f7a4 /libs/ardour/midi_ui.cc
parent2169de3975e8276233e2640391c8b526ec9e97fd (diff)
styleguide #10
sigc keeps a reference to the shared_ptr, AsyncMidiPorts were never unregistered, causing issues when loading a new session w/o Engine restart.
Diffstat (limited to 'libs/ardour/midi_ui.cc')
-rw-r--r--libs/ardour/midi_ui.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/libs/ardour/midi_ui.cc b/libs/ardour/midi_ui.cc
index 1d2fe7c7e1..c11f96c071 100644
--- a/libs/ardour/midi_ui.cc
+++ b/libs/ardour/midi_ui.cc
@@ -82,8 +82,13 @@ MidiControlUI::do_request (MidiUIRequest* req)
}
bool
-MidiControlUI::midi_input_handler (IOCondition ioc, boost::shared_ptr<AsyncMIDIPort> port)
+MidiControlUI::midi_input_handler (IOCondition ioc, boost::weak_ptr<AsyncMIDIPort> wport)
{
+ boost::shared_ptr<AsyncMIDIPort> port = wport.lock ();
+ if (!port) {
+ return false;
+ }
+
DEBUG_TRACE (DEBUG::MidiIO, string_compose ("something happend on %1\n", boost::shared_ptr<ARDOUR::Port> (port)->name()));
if (ioc & ~IO_IN) {
@@ -130,7 +135,8 @@ MidiControlUI::reset_ports ()
}
for (vector<boost::shared_ptr<AsyncMIDIPort> >::const_iterator pi = ports.begin(); pi != ports.end(); ++pi) {
- (*pi)->xthread().set_receive_handler (sigc::bind (sigc::mem_fun (this, &MidiControlUI::midi_input_handler), *pi));
+ (*pi)->xthread().set_receive_handler (sigc::bind (
+ sigc::mem_fun (this, &MidiControlUI::midi_input_handler), boost::weak_ptr<AsyncMIDIPort>(*pi)));
(*pi)->xthread().attach (_main_loop->get_context());
}
}