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