diff options
| -rw-r--r-- | sound/oss/midibuf.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sound/oss/midibuf.c b/sound/oss/midibuf.c index a40be0cf1d97..782b3b84dac6 100644 --- a/sound/oss/midibuf.c +++ b/sound/oss/midibuf.c | |||
| @@ -127,15 +127,16 @@ static void midi_poll(unsigned long dummy) | |||
| 127 | for (dev = 0; dev < num_midis; dev++) | 127 | for (dev = 0; dev < num_midis; dev++) |
| 128 | if (midi_devs[dev] != NULL && midi_out_buf[dev] != NULL) | 128 | if (midi_devs[dev] != NULL && midi_out_buf[dev] != NULL) |
| 129 | { | 129 | { |
| 130 | int ok = 1; | 130 | while (DATA_AVAIL(midi_out_buf[dev])) |
| 131 | |||
| 132 | while (DATA_AVAIL(midi_out_buf[dev]) && ok) | ||
| 133 | { | 131 | { |
| 132 | int ok; | ||
| 134 | int c = midi_out_buf[dev]->queue[midi_out_buf[dev]->head]; | 133 | int c = midi_out_buf[dev]->queue[midi_out_buf[dev]->head]; |
| 135 | 134 | ||
| 136 | spin_unlock_irqrestore(&lock,flags);/* Give some time to others */ | 135 | spin_unlock_irqrestore(&lock,flags);/* Give some time to others */ |
| 137 | ok = midi_devs[dev]->outputc(dev, c); | 136 | ok = midi_devs[dev]->outputc(dev, c); |
| 138 | spin_lock_irqsave(&lock, flags); | 137 | spin_lock_irqsave(&lock, flags); |
| 138 | if (!ok) | ||
| 139 | break; | ||
| 139 | midi_out_buf[dev]->head = (midi_out_buf[dev]->head + 1) % MAX_QUEUE_SIZE; | 140 | midi_out_buf[dev]->head = (midi_out_buf[dev]->head + 1) % MAX_QUEUE_SIZE; |
| 140 | midi_out_buf[dev]->len--; | 141 | midi_out_buf[dev]->len--; |
| 141 | } | 142 | } |
