[alsa-devel] [PATCH 3/3] ALSA: core: set kcontrol's count field correctly
Lu Guanqun
guanqun.lu at intel.com
Wed Aug 24 08:17:57 CEST 2011
On Wed, Aug 24, 2011 at 02:06:34PM +0800, Takashi Iwai wrote:
> At Wed, 24 Aug 2011 11:12:43 +0800,
> Lu Guanqun wrote:
> >
> > I don't see how info's owner field relates to kcontrol's count field. It should
> > assign to info's count instead.
> >
> > Let's assume this scenario:
> >
> > 1. user reads the control element from kernel (the owner field is set)
> > 2. user changes some values
> > 3. user issues 'SNDRV_CTL_IOCTL_ELEM_REPLACE' ioctl.
> >
> > With the original code, 'kctl' here gets a large count number due to its
> > non-empty owner field. Therefore it fails on subsequent call snd_ctl_new().
>
> In IOCTL_ELEM_ADD and REPLACE, count and owner struct fields have
> different meanings from others. The count contains the array size,
> not the number of identical elements. And the owner contains the
> number of elements to be created. So, the current code is correct.
This sounds tricky...
in snd_ctl_elem_info():
info->owner = pid_vnr(vd->owner->pid);
} else {
info->owner = -1;
This is where owner of info get assigned, but it's not number of
elements to be created. I'm a bit unclear on this.
>
> What we need is the documentation of this feature...
So my test case seems to be wrong, but how should I change it? Do I need
to clear the owner field when user space application sends down the
REPLACE ioctl?
--
guanqun
More information about the Alsa-devel
mailing list