[pulseaudio-discuss] [PATCH] alsa: reread configuration when opening new devices

Tanu Kaskinen tanuk at iki.fi
Mon May 23 12:51:38 UTC 2016

On Sun, 2016-05-22 at 02:05 +0500, Alexander E. Patrakov wrote:
> 22.05.2016 02:03, Alexander E. Patrakov wrote:
> > 
> > If a card has been hot-plugged after pulseaudio start, alsa-lib still has
> > old configuration in memory, which doesn't have PCM definitions for the
> > new card. Thus, this error appears, and the device doesn't work:
> > 
> > I: [pulseaudio] (alsa-lib)confmisc.c: Unable to find definition 'cards.USB-Audio.pcm.front.0:CARD=0'
> > I: [pulseaudio] (alsa-lib)conf.c: function snd_func_refer returned error: No such file or directory
> > I: [pulseaudio] (alsa-lib)conf.c: Evaluate error: No such file or directory
> > I: [pulseaudio] (alsa-lib)pcm.c: Unknown PCM front:0
> > I: [pulseaudio] alsa-util.c: Error opening PCM device front:0: No such file or directory
> > 
> > The snd_config_update_free_global() function makes alsa-lib forget any
> > cached configuration and reparse all PCM definitions from scratch next
> > time it is told to open anything.
> > 
> > The trick has been copied from Phonon.
> > 
> > Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=54029
> > Signed-off-by: Alexander E. Patrakov <patrakov at gmail.com>

Thanks for the patch!

> Obviously, the proposed patch is invalid if PulseAudio calls 
> snd_something_open() from more than one thread. I don't know if this is 
> the case.

Technically PulseAudio does call snd_something_open() from multiple
threads, but that's ok, because the only non-main thread calls are done
when unsuspending, and unsuspending is done in
the PA_SINK_MESSAGE_SET_STATE handler, which is processed
synchronously. So the main thread is waiting while the IO thread does
the unsuspending.

I applied the patch to the "next" branch.


More information about the pulseaudio-discuss mailing list