[alsa-devel] USB Audio initialization race
David Henningsson
david.henningsson at canonical.com
Fri Sep 13 21:56:00 CEST 2013
I'm sometimes seeing that USB audio devices are not initialized
correctly by PulseAudio, but I can't reproduce this myself.
I have, however, spotted what I think is a race condition in the driver
code, if a device has more than one interface. snd_card_register is
called once for every interface, which means that it will be shown to
userspace after the first interface has been probed. So the race could
look like:
1) The first interface is probed, which might contain the mixer controls
2) snd_card_register is called, which sends a signal to userspace
3) PulseAudio probes the device and notices that it has no PCMs, so it
ignores the device
4) The second interface is probed, which adds the PCMs
5) snd_card_register is again called, which is a no-op since the card
already exist
6) User is unhappy because his plugged in sound card did not show up in
PulseAudio.
So, assuming all this is right, it seems like we need some type of
callback from the usb driver when all the interfaces for the sound card
has been probed, so we can call snd_card_register at that point instead.
Thoughts?
--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
More information about the Alsa-devel
mailing list