[alsa-devel] [PATCH] ASoC: Fix resource leak if soc_register_ac97_dai_link failed
Properly free the resources in the case of soc_register_ac97_dai_link failure.
Signed-off-by: Axel Lin axel.lin@gmail.com ---
This patch is against Linus tree.
Regards, Axel sound/soc/soc-core.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 441285a..d7f80c3 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -1619,12 +1619,14 @@ static void snd_soc_instantiate_card(struct snd_soc_card *card) #ifdef CONFIG_SND_SOC_AC97_BUS /* register any AC97 codecs */ for (i = 0; i < card->num_rtd; i++) { - ret = soc_register_ac97_dai_link(&card->rtd[i]); - if (ret < 0) { - printk(KERN_ERR "asoc: failed to register AC97 %s\n", card->name); - goto probe_dai_err; - } + ret = soc_register_ac97_dai_link(&card->rtd[i]); + if (ret < 0) { + printk(KERN_ERR "asoc: failed to register AC97 %s\n", card->name); + while (--i >= 0) + soc_unregister_ac97_dai_link(&card->rtd[i]); + goto probe_dai_err; } + } #endif
card->instantiated = 1;
On Tue, Dec 07, 2010 at 08:56:30PM +0800, Axel Lin wrote:
Properly free the resources in the case of soc_register_ac97_dai_link failure.
Signed-off-by: Axel Lin axel.lin@gmail.com
Applied, thanks.
On Tue, Dec 7, 2010 at 07:56, Axel Lin wrote:
--- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -1619,12 +1619,14 @@ static void snd_soc_instantiate_card(struct snd_soc_card *card) #ifdef CONFIG_SND_SOC_AC97_BUS /* register any AC97 codecs */ for (i = 0; i < card->num_rtd; i++) {
- ret = soc_register_ac97_dai_link(&card->rtd[i]);
- if (ret < 0) {
- printk(KERN_ERR "asoc: failed to register AC97 %s\n", card->name);
- goto probe_dai_err;
- }
- ret = soc_register_ac97_dai_link(&card->rtd[i]);
- if (ret < 0) {
- printk(KERN_ERR "asoc: failed to register AC97 %s\n", card->name);
- while (--i >= 0)
- soc_unregister_ac97_dai_link(&card->rtd[i]);
- goto probe_dai_err;
}
- }
#endif
this isnt entirely correct. soc_unregister_ac97_dai_link takes a pointer to a codec which card->rtd[i] is not. sound/soc/soc-core.c: In function ‘snd_soc_instantiate_card’: sound/soc/soc-core.c:1626: warning: passing argument 1 of ‘soc_unregister_ac97_dai_link’ from incompatible pointer type -mike
participants (3)
-
Axel Lin
-
Mark Brown
-
Mike Frysinger