[alsa-devel] [patch] snd_pcm_dmix_close: raise semaphore if unable to discard
This patch causes snd_pcm_dmix_close() to up a semaphore after downing it if it is unable to discard it. It prevents some deadlock that I am getting when a couple of applications interact and one of them closes the device and later re-opens it.
--
--- src/pcm/pcm_dmix.c.orig 2007-10-17 20:19:47.000000000 -0400 +++ src/pcm/pcm_dmix.c 2007-10-17 20:50:46.000000000 -0400 @@ -652,8 +652,11 @@ if (dmix->client) snd_pcm_direct_client_discard(dmix); shm_sum_discard(dmix); - if (snd_pcm_direct_shm_discard(dmix)) - snd_pcm_direct_semaphore_discard(dmix); + if (snd_pcm_direct_shm_discard(dmix)) { + if (snd_pcm_direct_semaphore_discard(dmix)) { + snd_pcm_direct_semaphore_up(dmix, DIRECT_IPC_SEM_CLIENT); + } + } else snd_pcm_direct_semaphore_up(dmix, DIRECT_IPC_SEM_CLIENT); free(dmix->bindings);
At Wed, 17 Oct 2007 20:55:11 -0400 (EDT), Mike Gorse wrote:
This patch causes snd_pcm_dmix_close() to up a semaphore after downing it if it is unable to discard it. It prevents some deadlock that I am getting when a couple of applications interact and one of them closes the device and later re-opens it.
Thanks, applied to HG tree now.
Takashi
--
--- src/pcm/pcm_dmix.c.orig 2007-10-17 20:19:47.000000000 -0400 +++ src/pcm/pcm_dmix.c 2007-10-17 20:50:46.000000000 -0400 @@ -652,8 +652,11 @@ if (dmix->client) snd_pcm_direct_client_discard(dmix); shm_sum_discard(dmix);
- if (snd_pcm_direct_shm_discard(dmix))
snd_pcm_direct_semaphore_discard(dmix);
- if (snd_pcm_direct_shm_discard(dmix)) {
if (snd_pcm_direct_semaphore_discard(dmix)) {
snd_pcm_direct_semaphore_up(dmix, DIRECT_IPC_SEM_CLIENT);
}
- } else snd_pcm_direct_semaphore_up(dmix, DIRECT_IPC_SEM_CLIENT); free(dmix->bindings);
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
participants (2)
-
Mike Gorse
-
Takashi Iwai