diff options
author | Axel Lin <axel.lin@gmail.com> | 2010-11-03 15:04:45 +0800 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-11-03 09:08:20 -0400 |
commit | c46e0079cec40b49fbdb86a088cfd50b250fef47 (patch) | |
tree | f63438e618de0262fd503b932cd10a6ca6685d46 /sound | |
parent | 29c798fecb9b846b363b0a02fa662ff42fc19426 (diff) | |
download | linux-3.10-c46e0079cec40b49fbdb86a088cfd50b250fef47.tar.gz linux-3.10-c46e0079cec40b49fbdb86a088cfd50b250fef47.tar.bz2 linux-3.10-c46e0079cec40b49fbdb86a088cfd50b250fef47.zip |
ASoC: Fix snd_soc_register_dais error handling
kzalloc for dai may fail at any iteration of the for loop,
thus properly unregister already registered DAIs before return error.
The error handling code in snd_soc_register_dais() already ensure all the DAIs
are unregistered before return error, we can remove the error handling code
to unregister DAIs in snd_soc_register_codec().
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/soc-core.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 614a8b30d87..441285ade02 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -3043,8 +3043,10 @@ int snd_soc_register_dais(struct device *dev, for (i = 0; i < count; i++) { dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL); - if (dai == NULL) - return -ENOMEM; + if (dai == NULL) { + ret = -ENOMEM; + goto err; + } /* create DAI component name */ dai->name = fmt_multiple_name(dev, &dai_drv[i]); @@ -3263,9 +3265,6 @@ int snd_soc_register_codec(struct device *dev, return 0; error: - for (i--; i >= 0; i--) - snd_soc_unregister_dai(dev); - if (codec->reg_cache) kfree(codec->reg_cache); kfree(codec->name); |