close(dmix->hw_fd);
if (dmix->server_free)
dmix->server_free(dmix);
+ unlink(dmix->shmptr->socket_name);
snd_pcm_direct_shm_discard(dmix);
snd_pcm_direct_semaphore_discard(dmix);
server_printf("DIRECT SERVER EXIT\n");
snd_pcm_t *pcm = NULL, *spcm = NULL;
snd_pcm_direct_t *dmix = NULL;
int ret, first_instance;
+ int fail_sem_loop = 10;
assert(pcmp);
if (ret < 0)
goto _err;
- ret = snd_pcm_direct_semaphore_create_or_connect(dmix);
- if (ret < 0) {
- SNDERR("unable to create IPC semaphore");
- goto _err;
- }
- ret = snd_pcm_direct_semaphore_down(dmix, DIRECT_IPC_SEM_CLIENT);
- if (ret < 0) {
- snd_pcm_direct_semaphore_discard(dmix);
- goto _err;
+ while (1) {
+ ret = snd_pcm_direct_semaphore_create_or_connect(dmix);
+ if (ret < 0) {
+ SNDERR("unable to create IPC semaphore");
+ goto _err;
+ }
+ ret = snd_pcm_direct_semaphore_down(dmix, DIRECT_IPC_SEM_CLIENT);
+ if (ret < 0) {
+ snd_pcm_direct_semaphore_discard(dmix);
+ if (--fail_sem_loop <= 0)
+ goto _err;
+ continue;
+ }
+ break;
}
first_instance = ret = snd_pcm_direct_shm_create_or_connect(dmix);
snd_pcm_direct_t *dshare = NULL;
int ret, first_instance;
unsigned int chn;
+ int fail_sem_loop = 10;
assert(pcmp);
if (ret < 0)
goto _err;
- ret = snd_pcm_direct_semaphore_create_or_connect(dshare);
- if (ret < 0) {
- SNDERR("unable to create IPC semaphore");
- goto _err;
- }
+ while (1) {
+ ret = snd_pcm_direct_semaphore_create_or_connect(dshare);
+ if (ret < 0) {
+ SNDERR("unable to create IPC semaphore");
+ goto _err;
+ }
- ret = snd_pcm_direct_semaphore_down(dshare, DIRECT_IPC_SEM_CLIENT);
- if (ret < 0) {
- snd_pcm_direct_semaphore_discard(dshare);
- goto _err;
+ ret = snd_pcm_direct_semaphore_down(dshare, DIRECT_IPC_SEM_CLIENT);
+ if (ret < 0) {
+ snd_pcm_direct_semaphore_discard(dshare);
+ if (--fail_sem_loop <= 0)
+ goto _err;
+ continue;
+ }
+ break;
}
first_instance = ret = snd_pcm_direct_shm_create_or_connect(dshare);
{
snd_pcm_t *pcm = NULL, *spcm = NULL;
snd_pcm_direct_t *dsnoop = NULL;
- int ret, first_instance;
+ int ret, first_instance, fail_sem_loop = 10;
assert(pcmp);
if (ret < 0)
goto _err;
- ret = snd_pcm_direct_semaphore_create_or_connect(dsnoop);
- if (ret < 0) {
- SNDERR("unable to create IPC semaphore");
- goto _err;
- }
+ while (1) {
+ ret = snd_pcm_direct_semaphore_create_or_connect(dsnoop);
+ if (ret < 0) {
+ SNDERR("unable to create IPC semaphore");
+ goto _err;
+ }
- ret = snd_pcm_direct_semaphore_down(dsnoop, DIRECT_IPC_SEM_CLIENT);
- if (ret < 0) {
- snd_pcm_direct_semaphore_discard(dsnoop);
- goto _err;
+ ret = snd_pcm_direct_semaphore_down(dsnoop, DIRECT_IPC_SEM_CLIENT);
+ if (ret < 0) {
+ snd_pcm_direct_semaphore_discard(dsnoop);
+ if (--fail_sem_loop <= 0)
+ goto _err;
+ continue;
+ }
+ break;
}
first_instance = ret = snd_pcm_direct_shm_create_or_connect(dsnoop);