On Mon, 2013-09-30 at 14:06 +0200, David Henningsson wrote: [...] > > +static void ucm_port_data_free(pa_device_port *port) { > > + pa_alsa_ucm_port_data *data = PA_DEVICE_PORT_DATA(port); > > + > > + if (data->paths) { > > + pa_hashmap_free(data->paths); > > + } > > + > > + data->path = NULL; > > Any reason why you set data->path to null but not data->paths? I think that was to make sure there wasn't a stray reference to a path that was freed. > > +} > > + > > +static void probe_volumes(pa_hashmap *hash, snd_pcm_t *pcm_handle, bool ignore_dB) { > > + pa_device_port *port; > > + pa_alsa_path *path; > > + pa_alsa_ucm_port_data *data; > > + snd_mixer_t *mixer_handle; > > + snd_hctl_t *hctl; > > + const char *profile; > > + void *state, *state2; > > + > > + if (!(mixer_handle = pa_alsa_open_mixer_for_pcm(pcm_handle, NULL, &hctl))) { > > + pa_log_error("Failed to find a working mixer device."); > > + goto fail; > > + } > > > You probably want to not do "pa_alsa_open_mixer_for_pcm" here, but > instead try to use whatever the ucm file specifies in "cset" - in most > cases there wouldn't be a difference, but who knows... > > (This might also apply to more places) We don't have access to what 'cset' specifies, actually. That part is parsed by alsa-lib, not us. There /is/ a PlaybackCTL value defined in use-case.h, but we could implement support for that separately and fallback to what I have currently done. Makes sense? -- Arun