[alsa-devel] EBADFD caused by commit dec428c352217010e4b8bd750d302b8062339d32
Takashi Iwai
tiwai at suse.de
Thu Apr 14 17:40:59 CEST 2016
On Tue, 12 Apr 2016 22:24:08 +0200,
Lars Lindqvist wrote:
>
> Den 2016-04-12 skrev Takashi Iwai:
> > On Tue, 12 Apr 2016 18:46:17 +0200,
> > Lars Lindqvist wrote:
> > >
> > > Den 2016-04-12 skrev Takashi Iwai:
> > > > Actually we have a semaphore before shm access, so the race at two
> > > > opens shouldn't happen. I noticed it after I sent my previous mail.
> > > >
> > > > But the semaphore is taken also at snd_pcm_dmix_close(). So I wonder
> > > > where the race actually happens. Both open and close must be
> > > > protected while another stream is opening or closing.
> > > >
> > > > Could you try to check where you get the exact error...?
> > >
> > > The execution tree, as far as I can find is the following:
> > >
> > > snd_pcm_dmix_open:
> > > * Line 1009 snd_pcm_direct_shm_create_or_connect with the code in question,
> > > * which returns 0. So we end up in line 1058, dmix->shmtr->use_server is 0,
> > > * so go to line 1072.. running:
> > > snd_pcm_open_slave, running:
> > > snd_pcm_open_named_slave, running:
> > > snd_pcm_open_conf
> > > * where snd_dlobj_cache_get gives open_func = snd_pcm_hw_open, so
> > > snd_pcm_hw_open()
> > > snd_open_device("/dev/snd/pcmC0D0p")
> > > * where open() returns -1 with errno = EBADFD
> >
> > OK, then the question is why other stream could be closed while this
> > is being opened and protected via semaphore. Maybe the semaphore
> > protection isn't perfect?
> >
> > In anyway, in such a case, we may retry opening the stream as the
> > first element. This is safer than blindly assuming the first element
> > via nattach value (which is racy). An untested patch is below.
>
> Yes, this seems to work. I'm at least not able to trigger the problem
> myself anymore. I'll use this for a few days, and report back if I
> happen to get any unexpected EBADFDs.
OK, I now applied the fix to git tree. Let's see whether this works
stably enough. Let me know if you still see a similar problem with
it.
thanks,
Takashi
More information about the Alsa-devel
mailing list