ALSA: seq: Fix race at timer setup and close
[firefly-linux-kernel-4.4.55.git] / sound / core / seq / seq_queue.c
index 7dfd0f429410df217291271003d11ab385fcfc54..0bec02e89d5118b3dffe1e22e88e423baa037491 100644 (file)
@@ -142,8 +142,10 @@ static struct snd_seq_queue *queue_new(int owner, int locked)
 static void queue_delete(struct snd_seq_queue *q)
 {
        /* stop and release the timer */
+       mutex_lock(&q->timer_mutex);
        snd_seq_timer_stop(q->timer);
        snd_seq_timer_close(q);
+       mutex_unlock(&q->timer_mutex);
        /* wait until access free */
        snd_use_lock_sync(&q->use_lock);
        /* release resources... */