On Mon, 22 Aug 2016 18:04:33 +0200, Ismael Luceno wrote: > > 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> OK, I'll apply this one, as this change alone is fine. But in general, this implies that the application hitting this is buggy. You can't reliably call snd_pcm_open() for the same PCM stream concurrently via multi threads. You have to introduce the proper protection in the caller side. thanks, Takashi > --- > 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