From: Pavan Rallabhandi Date: Wed, 6 Aug 2014 09:40:14 +0000 (+0530) Subject: RadosClient: Fixing potential lock leaks. X-Git-Tag: v0.85~79^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F2220%2Fhead;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 --- 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();