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?
Lennart