[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 
strings array.

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 mailing list