[ALSA] Fix possible races in timer callbacks
Fix possible races in timer callbacks.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
diff --git a/sound/drivers/opl3/opl3_midi.c b/sound/drivers/opl3/opl3_midi.c
index 48c480e..1b6f227 100644
--- a/sound/drivers/opl3/opl3_midi.c
+++ b/sound/drivers/opl3/opl3_midi.c
@@ -238,10 +238,11 @@
{
struct snd_opl3 *opl3 = (struct snd_opl3 *)data;
+ unsigned long flags;
int again = 0;
int i;
- spin_lock(&opl3->sys_timer_lock);
+ spin_lock_irqsave(&opl3->sys_timer_lock, flags);
for (i = 0; i < opl3->max_voices; i++) {
struct snd_opl3_voice *vp = &opl3->voices[i];
if (vp->state > 0 && vp->note_off_check) {
@@ -257,7 +258,7 @@
} else {
opl3->sys_timer_status = 0;
}
- spin_unlock(&opl3->sys_timer_lock);
+ spin_unlock_irqrestore(&opl3->sys_timer_lock, flags);
}
/*