ASoC: dapm: release lock on error paths
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 13 Apr 2012 19:25:43 +0000 (22:25 +0300)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 15 Apr 2012 09:46:17 +0000 (10:46 +0100)
We added locking here but there were a couple error paths where we
forgot to drop the lock before returning.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/soc-dapm.c

index 589e16b..c92c537 100644 (file)
@@ -2131,7 +2131,7 @@ err:
 int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm,
                            const struct snd_soc_dapm_route *route, int num)
 {
-       int i, ret;
+       int i, ret = 0;
 
        mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_INIT);
        for (i = 0; i < num; i++) {
@@ -2139,13 +2139,13 @@ int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm,
                if (ret < 0) {
                        dev_err(dapm->dev, "Failed to add route %s->%s\n",
                                route->source, route->sink);
-                       return ret;
+                       break;
                }
                route++;
        }
        mutex_unlock(&dapm->card->dapm_mutex);
 
-       return 0;
+       return ret;
 }
 EXPORT_SYMBOL_GPL(snd_soc_dapm_add_routes);
 
@@ -2849,6 +2849,7 @@ int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm,
 {
        struct snd_soc_dapm_widget *w;
        int i;
+       int ret = 0;
 
        mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_INIT);
        for (i = 0; i < num; i++) {
@@ -2857,12 +2858,13 @@ int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm,
                        dev_err(dapm->dev,
                                "ASoC: Failed to create DAPM control %s\n",
                                widget->name);
-                       return -ENOMEM;
+                       ret = -ENOMEM;
+                       break;
                }
                widget++;
        }
        mutex_unlock(&dapm->card->dapm_mutex);
-       return 0;
+       return ret;
 }
 EXPORT_SYMBOL_GPL(snd_soc_dapm_new_controls);