diff options
author | Clemens Ladisch <clemens@ladisch.de> | 2005-03-10 10:45:19 +0000 |
---|---|---|
committer | Clemens Ladisch <clemens@ladisch.de> | 2005-03-10 10:45:19 +0000 |
commit | e3f57ccc903221eef77d98ad615b20d636059e5e (patch) | |
tree | f462085b11cc1b17685e3babf37726927e8739af /src/rawmidi | |
parent | 8003e03b5044e8080403dae5e42bd0a64ff77235 (diff) | |
download | alsa-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.c | 4 |
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); |