[alsa-devel] Duplicate configuration nodes
Jochem Wichers Hoeth
wiho-alsa at wihome.net
Mon Sep 7 16:43:58 CEST 2009
Since I upgraded from alsa-lib 1.0.20 to 1.0.21 my configuration is not
parsed correctly anymore:
$ aplay test.wav
ALSA lib conf.c:4639:(snd_config_expand) Expand error (walk): File exists
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
As a result of this error, ALSA seems to ignore the second half of
HDA-Intel.conf, including the iec958 definition.
I traced the "File exists" error back to snd_config_add() returning
-EEXIST, while evaluating the "strings" node at line 36 of
cards/HDA-Intel.conf. I verified that at that point the src node indeed
has four children: two duplicates of each child node of the original
I'm not exactly sure what's happening here, but I do see that the
HDA-Intel.conf file (and all of its included files) are actually read
*twice* by aplay. With alsa-lib 1.0.20 aplay only reads these files once.
The problem seems to be related to commit
96da0c842d14b40ce8e37726b259229634b3aa21 ("Fix driver conf parsing in
snd_config_hook_load_for_all_cards()"), which subtly changes the logic
when the same driver is encountered for the second time. I have two cards
using the HDA-Intel config (one analog and one digital). For the first
card, the config is loaded without issues. But for the second card,
snd_config_search(root, fdriver, &n) succeeds but snd_config_get_string(n,
&driver) fails. In 1.0.20 this results in a "goto __err", skipping the
actual config load. But in 1.0.21 this results in the else-branch being
chosen (driver = fdriver) and next snd_config_hook_load being called.
I know too little of the entire config loading process to be sure what
exactly is going wrong here, but a assume that the second call to
snd_config_hook_load for the same configaration file somehow
eventually results in the duplicate node error in snd_config_add().
I've verified that reverting 96da0c842d14b40ce8e37726b259229634b3aa21
fixes the problem, or at least the symptoms. :-)
Please let me know if you need extra information, of if you'd like me to
do some more testing.
Jochem Wichers Hoeth
More information about the Alsa-devel