[alsa-devel] snd_usb_endpoint_free
Takashi Iwai
tiwai at suse.de
Wed Jun 25 14:33:53 CEST 2014
At Wed, 25 Jun 2014 12:13:25 +0200,
Daniel Mack wrote:
>
> Hi Julia,
>
> On 06/25/2014 08:50 AM, Julia Lawall wrote:
> > On Wed, 25 Jun 2014, Julia Lawall wrote:
> >> The function snd_usb_endpoint_free in sound/usb/endpoint.c is defined as
> >> follows:
> >>
> >> void snd_usb_endpoint_free(struct list_head *head)
> >> {
> >> struct snd_usb_endpoint *ep;
> >>
> >> ep = list_entry(head, struct snd_usb_endpoint, list);
> >> release_urbs(ep, 1);
> >> kfree(ep);
> >> }
> >>
> >> I wonder if the final kfree should be list_del? In practice, this
> >
> > Sorry, the question should be "I wonder if this function should also use
> > list_del", since list_del doesn't subsume kfree.
> >
> > julia
> >
> >> function is only used from snd_usb_audio_disconnect in sound/usb/card.c
> >> where the entire list is destroyed, but it seems like quite a generic
> >> function that someone may someday want to use for just freeing one entry.
>
> Jup, you're right, a list_del() in there wouldn't harm. However, it
> currently wouldn't buy us anything either, and other functions we call
> from snd_usb_audio_disconnect() for list members don't kill their own
> list entry node themselves.
Yes, it'd be better but the current code works as is, too.
In anyway, I'm going to add a fix later; we're working on a
disconnection race fix that involves with this function.
thanks,
Takashi
More information about the Alsa-devel
mailing list