summaryrefslogtreecommitdiff
path: root/src/rawmidi
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2005-03-10 10:45:19 +0000
committerClemens Ladisch <clemens@ladisch.de>2005-03-10 10:45:19 +0000
commite3f57ccc903221eef77d98ad615b20d636059e5e (patch)
treef462085b11cc1b17685e3babf37726927e8739af /src/rawmidi
parent8003e03b5044e8080403dae5e42bd0a64ff77235 (diff)
downloadalsa-lib-e3f57ccc903221eef77d98ad615b20d636059e5e.tar.gz
rawmidi_virt: fix hang on invalid MIDI data
When writing invalid MIDI data to a virtual rawmidi port, snd_rawmidi_virtual_write() would forget to remove that data from the input buffer before continuing, resulting in an infinite loop.
Diffstat (limited to 'src/rawmidi')
-rw-r--r--src/rawmidi/rawmidi_virt.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/rawmidi/rawmidi_virt.c b/src/rawmidi/rawmidi_virt.c
index 03ce2e70..0e92042b 100644
--- a/src/rawmidi/rawmidi_virt.c
+++ b/src/rawmidi/rawmidi_virt.c
@@ -206,11 +206,11 @@ static ssize_t snd_rawmidi_virtual_write(snd_rawmidi_t *rmidi, const void *buffe
size1 = snd_midi_event_encode(virt->midi_event, buffer, size, &virt->out_event);
if (size1 <= 0)
break;
- if (virt->out_event.type == SND_SEQ_EVENT_NONE)
- continue;
size -= size1;
result += size1;
buffer += size1;
+ if (virt->out_event.type == SND_SEQ_EVENT_NONE)
+ continue;
snd_seq_ev_set_subs(&virt->out_event);
snd_seq_ev_set_source(&virt->out_event, virt->port);
snd_seq_ev_set_direct(&virt->out_event);