From: Takashi Iwai Date: Thu, 18 Oct 2007 09:10:35 +0000 (+0200) Subject: snd_pcm_dmix_close: raise semaphore if unable to discard X-Git-Tag: v1.0.16rc1~62 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=d6093c58f3d950eb5e150e1b21ac55ac87aa1ea7;p=alsa-lib.git 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. From: Mike Gorse --- diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c index 8ecbdcce..63a98d2f 100644 --- a/src/pcm/pcm_dmix.c +++ b/src/pcm/pcm_dmix.c @@ -652,9 +652,10 @@ static int snd_pcm_dmix_close(snd_pcm_t *pcm) 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); - else + 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); pcm->private_data = NULL;