diff options
-rw-r--r-- | src/librados/PoolAsyncCompletionImpl.h | 5 | ||||
-rw-r--r-- | src/librados/RadosClient.cc | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/librados/PoolAsyncCompletionImpl.h b/src/librados/PoolAsyncCompletionImpl.h index efb89641466..120f6d9fcc6 100644 --- a/src/librados/PoolAsyncCompletionImpl.h +++ b/src/librados/PoolAsyncCompletionImpl.h @@ -94,6 +94,9 @@ namespace librados { C_PoolAsync_Safe(PoolAsyncCompletionImpl *_c) : c(_c) { c->get(); } + ~C_PoolAsync_Safe() { + c->put(); + } void finish(int r) { c->lock.Lock(); @@ -109,7 +112,7 @@ namespace librados { c->lock.Lock(); } - c->put_unlock(); + c->Unlock(); } }; } diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 1be3ebd10f9..5c273f62ca8 100644 --- a/src/librados/RadosClient.cc +++ b/src/librados/RadosClient.cc @@ -459,6 +459,7 @@ int librados::RadosClient::pool_create_async(string& name, PoolAsyncCompletionIm Context *onfinish = new C_PoolAsync_Safe(c); int r = objecter->create_pool(name, onfinish, auid, crush_rule); if (r < 0) { + c->put(); delete onfinish; } return r; |