make generic MIDI support handle SendFeedback() in process()-context, not in the...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 24 Apr 2012 19:25:57 +0000 (19:25 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 24 Apr 2012 19:25:57 +0000 (19:25 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@12083 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/surfaces/generic_midi/generic_midi_control_protocol.cc

index bf3221b0b26fde4c384a5cb78d00cb5ad1456bd6..ae962feddc8f619d32e93d30b9c2f17acb72a64e 100644 (file)
@@ -75,7 +75,15 @@ GenericMidiControlProtocol::GenericMidiControlProtocol (Session& s)
        Controllable::CreateBinding.connect_same_thread (*this, boost::bind (&GenericMidiControlProtocol::create_binding, this, _1, _2, _3));
        Controllable::DeleteBinding.connect_same_thread (*this, boost::bind (&GenericMidiControlProtocol::delete_binding, this, _1));
 
-       Session::SendFeedback.connect (*this, MISSING_INVALIDATOR, ui_bind (&GenericMidiControlProtocol::send_feedback, this), midi_ui_context());;
+       /* this signal is emitted by the process() callback, and if
+        * send_feedback() is going to do anything, it should do it in the
+        * context of the process() callback itself.
+        */
+
+       Session::SendFeedback.connect_same_thread (*this, boost::bind (&GenericMidiControlProtocol::send_feedback, this));
+
+       /* this one is cross-thread */
+
        Route::RemoteControlIDChange.connect (*this, MISSING_INVALIDATOR, ui_bind (&GenericMidiControlProtocol::reset_controllables, this), midi_ui_context());
 
        reload_maps ();