From: Pavan Rallabhandi Date: Wed, 6 Aug 2014 09:40:14 +0000 (+0530) Subject: RadosClient: Fixing potential lock leaks. X-Git-Tag: v0.80.6~101 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bbb1e6a3a84b2d853f935687f01016e7c6a67951;p=ceph.git RadosClient: Fixing potential lock leaks. In lookup_pool and pool_delete, a lock is taken before invoking wait_for_osdmap, but is not released for the failure case of the call. Fixing the same. Fixes: #9022 Signed-off-by: Pavan Rallabhandi (cherry picked from commit f1aad8bcfc53f982130dbb3243660c3c546c3523) --- diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 249c34f564f0..9330e6536804 100644 --- a/src/librados/RadosClient.cc +++ b/src/librados/RadosClient.cc @@ -103,8 +103,10 @@ int64_t librados::RadosClient::lookup_pool(const char *name) lock.Lock(); int r = wait_for_osdmap(); - if (r < 0) + if (r < 0) { + lock.Unlock(); return r; + } int64_t ret = osdmap.lookup_pg_pool_name(name); pool_cache_rwl.get_write(); lock.Unlock(); @@ -582,8 +584,10 @@ int librados::RadosClient::pool_delete(const char *name) { lock.Lock(); int r = wait_for_osdmap(); - if (r < 0) + if (r < 0) { + lock.Unlock(); return r; + } int tmp_pool_id = osdmap.lookup_pg_pool_name(name); if (tmp_pool_id < 0) { lock.Unlock();