From 9c48cad021dd4f174f137f2edf761da613ab443d Mon Sep 17 00:00:00 2001 From: Brad Hubbard Date: Thu, 29 Dec 2016 13:07:30 +1000 Subject: [PATCH] test/librados/tier.cc: Fix valgrind errors Rectify memory leak and invalid reads. Fixes: http://tracker.ceph.com/issues/18360 Signed-off-by: Brad Hubbard --- src/test/librados/tier.cc | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/test/librados/tier.cc b/src/test/librados/tier.cc index 0a1dbf22c492..3b85de64fa13 100755 --- a/src/test/librados/tier.cc +++ b/src/test/librados/tier.cc @@ -114,6 +114,28 @@ protected: librados::IoCtx cache_ioctx; }; +class Completions +{ +public: + Completions() = default; + librados::AioCompletion* getCompletion() { + librados::AioCompletion* comp = librados::Rados::aio_create_completion(); + m_completions.push_back(comp); + return comp; + } + + ~Completions() { + for (auto& comp : m_completions) { + comp->release(); + } + } + +private: + vector m_completions; +}; + +Completions completions; + std::string LibRadosTwoPoolsPP::cache_pool_name; TEST_F(LibRadosTierPP, Dirty) { @@ -2022,8 +2044,7 @@ void start_flush_read() //cout << " starting read" << std::endl; ObjectReadOperation op; op.stat(NULL, NULL, NULL); - librados::AioCompletion *completion = - librados::Rados::aio_create_completion(); + librados::AioCompletion *completion = completions.getCompletion(); completion->set_complete_callback(0, flush_read_race_cb); read_ioctx->aio_operate("foo", completion, &op, NULL); } @@ -2038,7 +2059,6 @@ void flush_read_race_cb(completion_t cb, void *arg) } else { start_flush_read(); } - // fixme: i'm leaking cb... test_lock.Unlock(); } -- 2.47.3