pcm: close - deactivate async handler before snd_pcm_drop()

It reduces probablity to activate the async handler when snd_pcm_close() is called.

Link: https://github.com/alsa-project/alsa-lib/issues/394
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
Jaroslav Kysela 2024-09-06 12:56:16 +02:00
parent 513ef7ace4
commit 93d7645d84

View file

@ -777,6 +777,10 @@ int snd_pcm_close(snd_pcm_t *pcm)
{
int res = 0, err;
assert(pcm);
while (!list_empty(&pcm->async_handlers)) {
snd_async_handler_t *h = list_entry(pcm->async_handlers.next, snd_async_handler_t, hlist);
snd_async_del_handler(h);
}
if (pcm->setup && !pcm->donot_close) {
snd_pcm_drop(pcm);
err = snd_pcm_hw_free(pcm);
@ -785,10 +789,6 @@ int snd_pcm_close(snd_pcm_t *pcm)
}
if (pcm->mmap_channels)
snd_pcm_munmap(pcm);
while (!list_empty(&pcm->async_handlers)) {
snd_async_handler_t *h = list_entry(pcm->async_handlers.next, snd_async_handler_t, hlist);
snd_async_del_handler(h);
}
if (pcm->ops->close)
err = pcm->ops->close(pcm->op_arg);
else