summaryrefslogtreecommitdiffstats
path: root/sound/core/seq/seq_memory.c
diff options
context:
space:
mode:
authorTakashi Iwai2017-04-10 17:12:01 +0200
committerTakashi Iwai2017-04-10 17:12:01 +0200
commitff21b250e9b842140dee4b8c464f426fa2b09f8b (patch)
treeee512528bc829ae07b05c8437aadc210d4b872a1 /sound/core/seq/seq_memory.c
parentALSA: hda - set intel audio clock to a proper value (diff)
parentALSA: oxfw: fix regression to handle Stanton SCS.1m/1d (diff)
downloadkernel-qcow2-linux-ff21b250e9b842140dee4b8c464f426fa2b09f8b.tar.gz
kernel-qcow2-linux-ff21b250e9b842140dee4b8c464f426fa2b09f8b.tar.xz
kernel-qcow2-linux-ff21b250e9b842140dee4b8c464f426fa2b09f8b.zip
Merge branch 'for-linus' into for-next
Diffstat (limited to 'sound/core/seq/seq_memory.c')
-rw-r--r--sound/core/seq/seq_memory.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/sound/core/seq/seq_memory.c b/sound/core/seq/seq_memory.c
index 1a1acf3ddda4..d4c61ec9be13 100644
--- a/sound/core/seq/seq_memory.c
+++ b/sound/core/seq/seq_memory.c
@@ -415,6 +415,18 @@ int snd_seq_pool_init(struct snd_seq_pool *pool)
return 0;
}
+/* refuse the further insertion to the pool */
+void snd_seq_pool_mark_closing(struct snd_seq_pool *pool)
+{
+ unsigned long flags;
+
+ if (snd_BUG_ON(!pool))
+ return;
+ spin_lock_irqsave(&pool->lock, flags);
+ pool->closing = 1;
+ spin_unlock_irqrestore(&pool->lock, flags);
+}
+
/* remove events */
int snd_seq_pool_done(struct snd_seq_pool *pool)
{
@@ -425,10 +437,6 @@ int snd_seq_pool_done(struct snd_seq_pool *pool)
return -EINVAL;
/* wait for closing all threads */
- spin_lock_irqsave(&pool->lock, flags);
- pool->closing = 1;
- spin_unlock_irqrestore(&pool->lock, flags);
-
if (waitqueue_active(&pool->output_sleep))
wake_up(&pool->output_sleep);
@@ -485,6 +493,7 @@ int snd_seq_pool_delete(struct snd_seq_pool **ppool)
*ppool = NULL;
if (pool == NULL)
return 0;
+ snd_seq_pool_mark_closing(pool);
snd_seq_pool_done(pool);
kfree(pool);
return 0;