From: Jason Dillaman Date: Mon, 29 Jun 2015 22:38:48 +0000 (-0400) Subject: librados_test_stub: add reference counting to pools X-Git-Tag: v9.1.0~172^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c0a6218da1348354ddfc3a9579ff30794b4e70f6;p=ceph.git librados_test_stub: add reference counting to pools This will ensure that in-flight operations can't access freed pool memory. Signed-off-by: Jason Dillaman --- diff --git a/src/test/librados_test_stub/TestMemIoCtxImpl.cc b/src/test/librados_test_stub/TestMemIoCtxImpl.cc index a5b27cd3d222..bb39b49d62db 100644 --- a/src/test/librados_test_stub/TestMemIoCtxImpl.cc +++ b/src/test/librados_test_stub/TestMemIoCtxImpl.cc @@ -23,14 +23,21 @@ TestMemIoCtxImpl::TestMemIoCtxImpl() { } TestMemIoCtxImpl::TestMemIoCtxImpl(const TestMemIoCtxImpl& rhs) - : TestIoCtxImpl(rhs), m_client(rhs.m_client), m_pool(rhs.m_pool) { - } + : TestIoCtxImpl(rhs), m_client(rhs.m_client), m_pool(rhs.m_pool) { + m_pool->get(); +} TestMemIoCtxImpl::TestMemIoCtxImpl(TestMemRadosClient &client, int64_t pool_id, const std::string& pool_name, TestMemRadosClient::Pool *pool) - : TestIoCtxImpl(client, pool_id, pool_name), m_client(&client), m_pool(pool) { - } + : TestIoCtxImpl(client, pool_id, pool_name), m_client(&client), + m_pool(pool) { + m_pool->get(); +} + +TestMemIoCtxImpl::~TestMemIoCtxImpl() { + m_pool->put(); +} TestIoCtxImpl *TestMemIoCtxImpl::clone() { return new TestMemIoCtxImpl(*this); diff --git a/src/test/librados_test_stub/TestMemIoCtxImpl.h b/src/test/librados_test_stub/TestMemIoCtxImpl.h index 4fc2eb47ac51..e58b97a3feca 100644 --- a/src/test/librados_test_stub/TestMemIoCtxImpl.h +++ b/src/test/librados_test_stub/TestMemIoCtxImpl.h @@ -12,9 +12,10 @@ namespace librados { class TestMemIoCtxImpl : public TestIoCtxImpl { public: TestMemIoCtxImpl(); - explicit TestMemIoCtxImpl(TestMemRadosClient &client, int64_t m_pool_id, - const std::string& pool_name, - TestMemRadosClient::Pool *pool); + TestMemIoCtxImpl(TestMemRadosClient &client, int64_t m_pool_id, + const std::string& pool_name, + TestMemRadosClient::Pool *pool); + virtual ~TestMemIoCtxImpl(); virtual TestIoCtxImpl *clone(); diff --git a/src/test/librados_test_stub/TestMemRadosClient.cc b/src/test/librados_test_stub/TestMemRadosClient.cc index b89f4eb6fed2..b8bdf0777c31 100644 --- a/src/test/librados_test_stub/TestMemRadosClient.cc +++ b/src/test/librados_test_stub/TestMemRadosClient.cc @@ -78,7 +78,7 @@ int TestMemRadosClient::pool_delete(const std::string &pool_name) { if (iter == m_pools.end()) { return -ENOENT; } - delete iter->second; + iter->second->put(); m_pools.erase(iter); return 0; } diff --git a/src/test/librados_test_stub/TestMemRadosClient.h b/src/test/librados_test_stub/TestMemRadosClient.h index a6fb3bdb1d5f..e0afacb3a705 100644 --- a/src/test/librados_test_stub/TestMemRadosClient.h +++ b/src/test/librados_test_stub/TestMemRadosClient.h @@ -6,8 +6,10 @@ #include "test/librados_test_stub/TestRadosClient.h" #include "include/atomic.h" +#include "include/assert.h" #include "include/buffer.h" #include "include/interval_set.h" +#include "common/RefCountedObj.h" #include "common/RWLock.h" #include #include @@ -48,7 +50,7 @@ public: typedef std::map Files; typedef std::set SnapSeqs; - struct Pool { + struct Pool : public RefCountedObject { Pool(); int64_t pool_id;