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 <mgorse@mgorse.dhs.org>
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;