[alsa-devel] libasound2: snd_device_name_hint() wrongly calls snd_config_delete()
forwarded 549531 alsa-devel@alsa-project.org thanks
This looks more like a general problem and shouldn't be solved distribution specific so request for help to the alsa developers.
Elimar
* John Lindgren [091003 20:34 -0400]
Package: libasound2 Version: 1.0.21a-1 Severity: normal Tags: patch
Symptoms
This bug first showed up because of a new ALSA output plugin for Audacious audio player:
http://jira.atheme.org/browse/AUDPLUG-77#action_10640
Essentially, any call to snd_device_name_hint() causes later calls to snd_pcm_open() to fail with messages like these:
ALSA lib conf.c:4600:(snd_config_expand) Unknown parameters CARD=Live,DEV=0 ALSA lib pcm.c:2211:(snd_pcm_open_noupdate) Unknown PCM rear:CARD=Live,DEV=0
This happens only for PCMs defined in ALSA config files (such as the ones under /usr/share/alsa/cards), not for "default" or "hw:0,0"-style. It does not seem to depend on a particular sound card. It can be reproduced without Audacious by adding a call to pcm_list() before the call to snd_pcm_open() in aplay.c from the alsa-utils package:
$ ./aplay -D front:CARD=ICH6,DEV=0 Test.wav default:CARD=ICH6 Intel ICH6, Intel ICH6 Default Audio Device front:CARD=ICH6,DEV=0 Intel ICH6, Intel ICH6 Front speakers surround40:CARD=ICH6,DEV=0 Intel ICH6, Intel ICH6 4.0 Surround output to Front and Rear speakers surround41:CARD=ICH6,DEV=0 Intel ICH6, Intel ICH6 4.1 Surround output to Front, Rear and Subwoofer speakers surround50:CARD=ICH6,DEV=0 Intel ICH6, Intel ICH6 5.0 Surround output to Front, Center and Rear speakers surround51:CARD=ICH6,DEV=0 Intel ICH6, Intel ICH6 5.1 Surround output to Front, Center, Rear and Subwoofer speakers iec958:CARD=ICH6,DEV=0 Intel ICH6, Intel ICH6 - IEC958 IEC958 (S/PDIF) Digital Audio Output null Discard all samples (playback) or generate zero samples (capture) ALSA lib conf.c:4600:(snd_config_expand) Unknown parameters CARD=ICH6,DEV=0 ALSA lib pcm.c:2211:(snd_pcm_open_noupdate) Unknown PCM front:CARD=ICH6,DEV=0 aplay: main:610: audio open error: Invalid argument
Diagnosis
try_config(), called by snd_device_name_hint(), calls snd_config_search_definition() at namehint.c line 243 and snd_config_search_alias_hooks() at line 339, then calls snd_config_delete() on the returned nodes at lines 331 and 383. This was probably meant to prevent leaking memory returned by the search functions, but in fact it removes information from the config that is needed by later calls, such as snd_pcm_open. Hence, snd_pcm_open behaves as though devices like "front" and "rear" do not exist.
I have attached a patch for aplay.c to reproduce the problem and a patch for namehint.c to fix it. One side effect of the fix (on my system at least) is that two "null" devices are now listed by "aplay -L" and in Audacious.
Peace, John Lindgren
-- System Information: Debian Release: squeeze/sid APT prefers testing APT policy: (500, 'testing') Architecture: i386 (i686)
Kernel: Linux 2.6.30-1-686 (SMP w/1 CPU core) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash
Versions of packages libasound2 depends on: ii libc6 2.9-25 GNU C Library: Shared libraries
libasound2 recommends no packages.
Versions of packages libasound2 suggests: pn libasound2-plugins <none> (no description available)
-- no debconf information
--- aplay.0.c 2009-08-31 11:13:36.000000000 -0400 +++ aplay.c 2009-10-03 19:54:43.000000000 -0400 @@ -603,6 +603,8 @@ goto __end; }
- pcm_list();
- err = snd_pcm_open(&handle, pcm_name, stream, open_mode); if (err < 0) { error(_("audio open error: %s"), snd_strerror(err));
--- namehint.0.c 2009-09-09 08:34:54.000000000 -0400 +++ namehint.c 2009-10-03 17:39:23.000000000 -0400 @@ -328,7 +328,6 @@ if (snd_config_search(cfg1, "slave", &cfg) >= 0 && snd_config_search(cfg, base, &cfg1) >= 0) goto __hint;
- snd_config_delete(res); res = NULL; if (strchr(buf, ':') != NULL) goto __ok;
@@ -379,8 +378,6 @@ err = hint_list_add(list, buf, buf1); } __skip_add:
if (res)
if (buf1) free(buf1); free(buf);snd_config_delete(res);
Pkg-alsa-devel mailing list Pkg-alsa-devel@lists.alioth.debian.org http://lists.alioth.debian.org/mailman/listinfo/pkg-alsa-devel
participants (1)
-
Elimar Riesebieter