[PATCH] pcm: Fix shm initialization race-condition

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Easily seen when two threads try at the same time, one of them will fail.

The bug was identified by using apulse with Skype.

Fixes: dec428c35221 ("pcm: fix 'unable to create IPC shm instance' caused by fork from a thread")
Fixes: https://github.com/i-rinat/apulse/issues/38
Signed-off-by: Ismael Luceno <ismael@xxxxxxxxxxx>
---
 src/pcm/pcm_direct.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/pcm/pcm_direct.c b/src/pcm/pcm_direct.c
index c3925cc20fd3..643498375b34 100644
--- a/src/pcm/pcm_direct.c
+++ b/src/pcm/pcm_direct.c
@@ -96,11 +96,12 @@ int snd_pcm_direct_shm_create_or_connect(snd_pcm_direct_t *dmix)
 retryget:
 	dmix->shmid = shmget(dmix->ipc_key, sizeof(snd_pcm_direct_share_t),
 			     dmix->ipc_perm);
-	if (dmix->shmid < 0) {
-		if (errno == ENOENT)
+	if (dmix->shmid < 0 && errno == ENOENT) {
 		if ((dmix->shmid = shmget(dmix->ipc_key, sizeof(snd_pcm_direct_share_t),
 					     IPC_CREAT | IPC_EXCL | dmix->ipc_perm)) != -1)
 			first_instance = 1;
+		else if (errno == EEXIST)
+			goto retryget;
 	}
 	err = -errno;
 	if (dmix->shmid < 0) {
-- 
2.9.2

_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux