[alsa-devel] [PATCH] pcm: Fix shm initialization race-condition
Takashi Iwai
tiwai at suse.de
Mon Aug 22 11:26:35 CEST 2016
On Sun, 14 Aug 2016 02:28:52 +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 at iodev.co.uk>
> ---
> src/pcm/pcm_direct.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/src/pcm/pcm_direct.c b/src/pcm/pcm_direct.c
> index c3925cc20fd3..b5215ba35406 100644
> --- a/src/pcm/pcm_direct.c
> +++ b/src/pcm/pcm_direct.c
> @@ -101,6 +101,8 @@ retryget:
> if ((dmix->shmid = shmget(dmix->ipc_key, sizeof(snd_pcm_direct_share_t),
> IPC_CREAT | IPC_EXCL | dmix->ipc_perm)) != -1)
> first_instance = 1;
> + if (dmix->shmid < 0 && errno == EEXIST)
> + goto retryget;
Hrm, but this would result in an endless loop if the shm was already
taken persistently.
Also, which call does give a negative shmid, actually? It's from the
first shmget() or the second shmget()?
(The existing code is ugly and we need to fix the indentation
there...)
thanks,
Takashi
More information about the Alsa-devel
mailing list