mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-03 12:19:33 +01:00
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.
This commit is contained in:
parent
2169de3975
commit
7cbc6cf8a2
2 changed files with 9 additions and 3 deletions
|
|
@ -62,7 +62,7 @@ class LIBARDOUR_API MidiControlUI : public AbstractUI<MidiUIRequest>
|
|||
private:
|
||||
ARDOUR::Session& _session;
|
||||
|
||||
bool midi_input_handler (Glib::IOCondition, boost::shared_ptr<AsyncMIDIPort>);
|
||||
bool midi_input_handler (Glib::IOCondition, boost::weak_ptr<AsyncMIDIPort>);
|
||||
void reset_ports ();
|
||||
void clear_ports ();
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue