Update of /cvsroot/alsa/alsa-lib/src/pcm In directory sc8-pr-cvs1:/tmp/cvs-serv19339
Modified Files: pcm_direct.c pcm_dmix.c pcm_dshare.c pcm_dsnoop.c Log Message: Added unlink of the communication socket name. Added retry when the semaphore is lost (server is going down and removes the global semaphore). Now the application creates a new direct server automagically rather than the error return. Index: pcm_direct.c =================================================================== RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_direct.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- pcm_direct.c 23 Apr 2003 12:41:57 -0000 1.3 +++ pcm_direct.c 15 Jul 2003 19:15:10 -0000 1.4 @@ -280,6 +280,7 @@ 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"); Index: pcm_dmix.c =================================================================== RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_dmix.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- pcm_dmix.c 1 Jul 2003 09:24:30 -0000 1.38 +++ pcm_dmix.c 15 Jul 2003 19:15:10 -0000 1.39 @@ -893,6 +893,7 @@ snd_pcm_t *pcm = NULL, *spcm = NULL; snd_pcm_direct_t *dmix = NULL; int ret, first_instance; + int fail_sem_loop = 10; assert(pcmp); @@ -919,16 +920,21 @@ 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); Index: pcm_dshare.c =================================================================== RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_dshare.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- pcm_dshare.c 1 Jul 2003 09:24:30 -0000 1.5 +++ pcm_dshare.c 15 Jul 2003 19:15:10 -0000 1.6 @@ -684,6 +684,7 @@ snd_pcm_direct_t *dshare = NULL; int ret, first_instance; unsigned int chn; + int fail_sem_loop = 10; assert(pcmp); @@ -716,16 +717,21 @@ 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); Index: pcm_dsnoop.c =================================================================== RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_dsnoop.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- pcm_dsnoop.c 1 Jul 2003 09:24:30 -0000 1.5 +++ pcm_dsnoop.c 15 Jul 2003 19:15:10 -0000 1.6 @@ -650,7 +650,7 @@ { 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); @@ -677,16 +677,21 @@ 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); ------------------------------------------------------- This SF.Net email sponsored by: Parasoft Error proof Web apps, automate testing & more. Download & eval WebKing and get a free book. www.parasoft.com/bulletproofapps1 _______________________________________________ Alsa-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-cvslog