ALSA: usb-audio: Unify audioformat release code
There are many open code for releasing audioformat object. Provide a unified helper and call it from the all places. Only a cleanup, no functional changes. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
dae02c8c64
commit
c1ae5e7f05
|
@ -28,6 +28,14 @@
|
|||
#include "power.h"
|
||||
#include "media.h"
|
||||
|
||||
static void audioformat_free(struct audioformat *fp)
|
||||
{
|
||||
list_del(&fp->list); /* unlink for avoiding double-free */
|
||||
kfree(fp->rate_table);
|
||||
kfree(fp->chmap);
|
||||
kfree(fp);
|
||||
}
|
||||
|
||||
/*
|
||||
* free a substream
|
||||
*/
|
||||
|
@ -37,11 +45,8 @@ static void free_substream(struct snd_usb_substream *subs)
|
|||
|
||||
if (!subs->num_formats)
|
||||
return; /* not initialized */
|
||||
list_for_each_entry_safe(fp, n, &subs->fmt_list, list) {
|
||||
kfree(fp->rate_table);
|
||||
kfree(fp->chmap);
|
||||
kfree(fp);
|
||||
}
|
||||
list_for_each_entry_safe(fp, n, &subs->fmt_list, list)
|
||||
audioformat_free(fp);
|
||||
kfree(subs->rate_list.list);
|
||||
kfree(subs->str_pd);
|
||||
snd_media_stream_delete(subs);
|
||||
|
@ -832,8 +837,7 @@ snd_usb_get_audioformat_uac12(struct snd_usb_audio *chip,
|
|||
/* ok, let's parse further... */
|
||||
if (snd_usb_parse_audio_format(chip, fp, format,
|
||||
fmt, stream) < 0) {
|
||||
kfree(fp->rate_table);
|
||||
kfree(fp);
|
||||
audioformat_free(fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1043,9 +1047,7 @@ snd_usb_get_audioformat_uac3(struct snd_usb_audio *chip,
|
|||
|
||||
pd = kzalloc(sizeof(*pd), GFP_KERNEL);
|
||||
if (!pd) {
|
||||
kfree(fp->chmap);
|
||||
kfree(fp->rate_table);
|
||||
kfree(fp);
|
||||
audioformat_free(fp);
|
||||
return NULL;
|
||||
}
|
||||
pd->pd_id = (stream == SNDRV_PCM_STREAM_PLAYBACK) ?
|
||||
|
@ -1064,9 +1066,7 @@ snd_usb_get_audioformat_uac3(struct snd_usb_audio *chip,
|
|||
/* ok, let's parse further... */
|
||||
if (snd_usb_parse_audio_format_v3(chip, fp, as, stream) < 0) {
|
||||
kfree(pd);
|
||||
kfree(fp->chmap);
|
||||
kfree(fp->rate_table);
|
||||
kfree(fp);
|
||||
audioformat_free(fp);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
@ -1185,11 +1185,8 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
|
|||
err = snd_usb_add_audio_stream(chip, stream, fp);
|
||||
|
||||
if (err < 0) {
|
||||
list_del(&fp->list); /* unlink for avoiding double-free */
|
||||
audioformat_free(fp);
|
||||
kfree(pd);
|
||||
kfree(fp->rate_table);
|
||||
kfree(fp->chmap);
|
||||
kfree(fp);
|
||||
return err;
|
||||
}
|
||||
/* try to set the interface... */
|
||||
|
|
Loading…
Reference in New Issue