From bbb1e6a3a84b2d853f935687f01016e7c6a67951 Mon Sep 17 00:00:00 2001 From: Pavan Rallabhandi Date: Wed, 6 Aug 2014 15:10:14 +0530 Subject: [PATCH] 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) --- src/librados/RadosClient.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 249c34f564f00..9330e65368048 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(); -- 2.39.5