]> git.sesse.net Git - nageru/blobdiff - shared/midi_device.cpp
Fix a deadlock in Futatabi when using MIDI devices.
[nageru] / shared / midi_device.cpp
index ab84fda6db51099e3ecf03013bc08a7b0a60947a..0383ec20d921bd8166595a24f4fe6fe3201124a3 100644 (file)
@@ -154,7 +154,6 @@ void MIDIDevice::handle_event(snd_seq_t *seq, snd_seq_event_t *event)
                return;
        }
 
-       lock_guard<recursive_mutex> lock(mu);
        switch (event->type) {
        case SND_SEQ_EVENT_CONTROLLER: {
                receiver->controller_received(event->data.control.param, event->data.control.value);
@@ -169,9 +168,11 @@ void MIDIDevice::handle_event(snd_seq_t *seq, snd_seq_event_t *event)
                receiver->note_on_received(event->data.note.note);
                break;
        }
-       case SND_SEQ_EVENT_PORT_START:
+       case SND_SEQ_EVENT_PORT_START: {
+               lock_guard<recursive_mutex> lock(mu);
                subscribe_to_port_lock_held(seq, event->data.addr);
                break;
+       }
        case SND_SEQ_EVENT_PORT_EXIT:
                printf("MIDI port %d:%d went away.\n", event->data.addr.client, event->data.addr.port);
                break;