On Sun, 25 Nov 2007, Lennart Poettering wrote:
On Sun, 25.11.07 22:56, Jaroslav Kysela (perex@perex.cz) wrote:
==22198== 10 bytes in 1 blocks are definitely lost in loss record 1 of 3 ==22198== at 0x4023765: malloc (vg_replace_malloc.c:149) ==22198== by 0x417C44F: strdup (strdup.c:43) ==22198== by 0x4071954: snd_determine_driver (in /usr/lib/libasound.so.2.0.0) ==22198== by 0x406E80C: snd_config_hook_load_for_all_cards (in /usr/lib/libasound.so.2.0.0) ==22198== by 0x406EC7C: (within /usr/lib/libasound.so.2.0.0) ==22198== by 0x406F896: snd_config_searcha_hooks (in /usr/lib/libasound.so.2.0.0) ==22198== by 0x406FA74: snd_config_search_alias_hooks (in /usr/lib/libasound.so.2.0.0) ==22198== by 0x406FCD9: snd_config_search_definition (in /usr/lib/libasound.so.2.0.0) ==22198== by 0x40952FE: (within /usr/lib/libasound.so.2.0.0) ==22198== by 0x80484D7: main (in /home/lennart/alsa-test)
Broken valgrind?
Unlikely.
I cannot reproduce here and from first glance, the error path in snd_config_hook_load_for_all_cards is good.
I don't fully grok the code of that function (snd_config_hook_load_for_all_cards()), but from *my* first glance I see that snd_determine_driver() allocates the string. Immediately after that call there are at least two "continue"s which will cause immediate jumping to the next iteration of the loop this whole code lives in, without ever freeing the string.
Or am I blind or missed something?
No, I'm blind (seeing and associating continue to inner while) ;-) Thanks for notice. This commit should fix the problem:
http://hg.alsa-project.org/alsa-lib/rev/c8aa952a4579
Jaroslav
----- Jaroslav Kysela perex@perex.cz Linux Kernel Sound Maintainer ALSA Project