media: tegra: avp: fix a mutex leak on an err path in lib load
authorDima Zavin <dima@android.com>
Wed, 10 Nov 2010 18:18:04 +0000 (10:18 -0800)
committerDima Zavin <dima@android.com>
Thu, 11 Nov 2010 01:03:15 +0000 (17:03 -0800)
Also hold the mutex for longer on cleanup, while deleting
the libs nvmap client. Not strictly necessary...

Change-Id: I4dfdb065211571338053a16bacc2e5412c26ae77
Signed-off-by: Dima Zavin <dima@android.com>
drivers/media/video/tegra/avp/avp.c

index 7d4ecc05b2e4d9c76e021a04caeb14899a97a2ad..d5c3385b6fe6e3f34db787f3f75c5f107948e67c 100644 (file)
@@ -1233,10 +1233,10 @@ static int handle_load_lib_ioctl(struct avp_info *avp, unsigned long arg)
        return 0;
 
 err_insert_lib:
-       send_unload_lib_msg(avp, lib.handle, lib.name);
 err_copy_to_user:
-       mutex_unlock(&avp->libs_lock);
+       send_unload_lib_msg(avp, lib.handle, lib.name);
 err_load_lib:
+       mutex_unlock(&avp->libs_lock);
        return ret;
 }
 
@@ -1275,10 +1275,10 @@ static void libs_cleanup(struct avp_info *avp)
        list_for_each_entry_safe(lib, lib_tmp, &avp->libs, list) {
                _delete_lib_locked(avp, lib);
        }
-       mutex_unlock(&avp->libs_lock);
 
        nvmap_client_put(avp->nvmap_libs);
        avp->nvmap_libs = NULL;
+       mutex_unlock(&avp->libs_lock);
 }
 
 static long tegra_avp_ioctl(struct file *file, unsigned int cmd,