]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - sound/core/timer.c
ALSA: timer: Fix race between stop and interrupt
[karo-tx-linux.git] / sound / core / timer.c
index dea932ac61655f5ad9da114fec3e25e9a596b310..a0405b0078c62a48fc039a9ae628f658fa1d4311 100644 (file)
@@ -518,9 +518,13 @@ static int _snd_timer_stop(struct snd_timer_instance *timeri, int event)
                        spin_unlock_irqrestore(&slave_active_lock, flags);
                        return -EBUSY;
                }
+               if (timeri->timer)
+                       spin_lock(&timeri->timer->lock);
                timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING;
                list_del_init(&timeri->ack_list);
                list_del_init(&timeri->active_list);
+               if (timeri->timer)
+                       spin_unlock(&timeri->timer->lock);
                spin_unlock_irqrestore(&slave_active_lock, flags);
                goto __end;
        }