[alsa-devel] load_for_all_cards bug
Kevin Goodsell
kevin-list-alsa-devel at omegacrash.net
Tue Jun 30 21:37:10 CEST 2009
(I originally tried to send this via the moderator without subscribing
to the list, but it never went through and I never received a moderator
response. Apparently this list is set up as moderated, but nobody is
actually moderating it.)
Summary: load_for_all_cards fails with existing configuration elements
In snd_config_hook_load_for_all_cards, the first call to
snd_config_search attempts to locate an existing configuration node with
the name of the driver. Typically none is found, and everything is
good. However, if such a node is located, the next line assumes it is a
leaf node with type 'string' and calls snd_config_get_string to fetch
the string value. If this fails, the entire hook is abandoned.
Because of this, setting something like the following in asoundrc:
cards.<driver name>.foo 0
is sufficient to disable the entire card-specific configuration.
As a concrete example, I have a HDA-Intel sound card. dmix.conf includes
a way to set period_size, period_time, and periods by using
configuration elements of the form cards.<driver name>.pcm.dmix.<var>.
In ~/.asoundrc I add
cards.HDA-Intel.pcm.dmix.period_size 1024
This will cause HDA-Intel.conf to fail to load, and the pcm defined in
default.conf will fail to find the device-specific pcm
cards.HDA-Intel.pcm.default, and fall back on the default pcm using
plughw. By attempting to configure dmix, I have disabled it.
Fixing this may just be a matter of changing the line in
snd_config_hook_load_for_all_cards from:
if (snd_config_search(root, fdriver, &n) >= 0) {
to:
if (snd_config_search(root, fdriver, &n) >= 0 && n->type !=
SND_CONFIG_TYPE_COMPOUND) {
I have not tested this.
-Kevin
More information about the Alsa-devel
mailing list