diff options
author | Takashi Iwai | 2017-04-10 17:12:01 +0200 |
---|---|---|
committer | Takashi Iwai | 2017-04-10 17:12:01 +0200 |
commit | ff21b250e9b842140dee4b8c464f426fa2b09f8b (patch) | |
tree | ee512528bc829ae07b05c8437aadc210d4b872a1 /sound/core/seq/seq_memory.c | |
parent | ALSA: hda - set intel audio clock to a proper value (diff) | |
parent | ALSA: oxfw: fix regression to handle Stanton SCS.1m/1d (diff) | |
download | kernel-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.c | 17 |
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; |