]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test/librados: Silence Coverity memory leak warnings 12442/head
authorBrad Hubbard <bhubbard@redhat.com>
Wed, 21 Dec 2016 07:54:39 +0000 (17:54 +1000)
committerBrad Hubbard <bhubbard@redhat.com>
Wed, 21 Dec 2016 07:54:39 +0000 (17:54 +1000)
Use Sam's scope_guard solution to stop warnings about leaked resources.

Signed-off-by: Brad Hubbard <bhubbard@redhat.com>
src/test/librados/TestCase.cc

index 5efb891de0ec5a4057f33e81444d01ab50617d3d..5acbec3881e5e792273459a37e08f24db96f6427 100644 (file)
@@ -4,6 +4,7 @@
 #include <errno.h>
 #include "test/librados/test.h"
 #include "test/librados/TestCase.h"
+#include "include/scope_guard.h"
 
 using namespace librados;
 
@@ -42,7 +43,10 @@ void RadosTestNS::cleanup_all_objects(rados_ioctx_t ioctx)
   rados_ioctx_snap_set_read(ioctx, LIBRADOS_SNAP_HEAD);
   rados_ioctx_set_namespace(ioctx, LIBRADOS_ALL_NSPACES);
   rados_list_ctx_t list_ctx;
+
   ASSERT_EQ(0, rados_nobjects_list_open(ioctx, &list_ctx));
+  auto sg = make_scope_guard([&] { rados_nobjects_list_close(list_ctx); });
+
   int r;
   const char *entry = NULL;
   const char *key = NULL;
@@ -53,7 +57,6 @@ void RadosTestNS::cleanup_all_objects(rados_ioctx_t ioctx)
     rados_ioctx_set_namespace(ioctx, nspace);
     ASSERT_EQ(0, rados_remove(ioctx, entry));
   }
-  rados_nobjects_list_close(list_ctx);
 }
 
 std::string RadosTestPPNS::pool_name;
@@ -284,7 +287,10 @@ void RadosTest::cleanup_namespace(rados_ioctx_t ioctx, std::string ns)
   rados_ioctx_snap_set_read(ioctx, LIBRADOS_SNAP_HEAD);
   rados_ioctx_set_namespace(ioctx, ns.c_str());
   rados_list_ctx_t list_ctx;
+
   ASSERT_EQ(0, rados_nobjects_list_open(ioctx, &list_ctx));
+  auto sg = make_scope_guard([&] { rados_nobjects_list_close(list_ctx); });
+
   int r;
   const char *entry = NULL;
   const char *key = NULL;
@@ -293,7 +299,6 @@ void RadosTest::cleanup_namespace(rados_ioctx_t ioctx, std::string ns)
     rados_ioctx_locator_set_key(ioctx, key);
     ASSERT_EQ(0, rados_remove(ioctx, entry));
   }
-  rados_nobjects_list_close(list_ctx);
 }
 
 std::string RadosTestPP::pool_name;
@@ -343,12 +348,14 @@ void RadosTestPP::cleanup_namespace(librados::IoCtx ioctx, std::string ns)
     ioctx.locator_set_key(it->get_locator());
     ObjectWriteOperation op;
     op.remove();
+
     librados::AioCompletion *completion = s_cluster.aio_create_completion();
+    auto sg = make_scope_guard([&] { completion->release(); });
+
     ASSERT_EQ(0, ioctx.aio_operate(it->get_oid(), completion, &op,
                                   librados::OPERATION_IGNORE_CACHE));
     completion->wait_for_safe();
     ASSERT_EQ(0, completion->get_return_value());
-    completion->release();
   }
 }