summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2013-10-03 11:49:33 -0700
committerYehuda Sadeh <yehuda@inktank.com>2013-10-03 11:49:33 -0700
commit24b734fab96fc1f111fc4cf1bb3155831d9933a4 (patch)
tree2706f2fa9334789708994ae53e37384a1a454760
parentb032931dc760f2a9baa7879f422caf8d9281e6c4 (diff)
downloadceph-wip-6444.tar.gz
librados: drop reference to completion in container destructorwip-6444
Move the PoolAsyncCompletionImpl reference drop from C_PoolAsync_Safe::finish() to ~C_PoolAsyncSafe(), as finish() is only called when the async request is actually sent. Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
-rw-r--r--src/librados/PoolAsyncCompletionImpl.h5
-rw-r--r--src/librados/RadosClient.cc1
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;