ALSA: timer: Fix race between stop and interrupt
[pandora-kernel.git] / sound / core / timer.c
index 972a5f1..9198fe2 100644 (file)
@@ -510,9 +510,13 @@ static int _snd_timer_stop(struct snd_timer_instance * timeri,
                                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;