]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: delete entries_index in RGWFetchAllMetaCR 11872/head
authorCasey Bodley <cbodley@redhat.com>
Fri, 4 Nov 2016 16:18:32 +0000 (12:18 -0400)
committerLoic Dachary <ldachary@redhat.com>
Wed, 9 Nov 2016 15:08:11 +0000 (16:08 +0100)
use a unique_ptr to ensure the entries_index is freed on destruction

Fixes: http://tracker.ceph.com/issues/17812
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit 9c731ed6b606e39000025ab569f412ece0cc7fce)

src/rgw/rgw_sync.cc

index 3d494efed65e139d08f37373c98889536fa64550..1a404c785f4569222f03f1ba6eec08a76a0b954e 100644 (file)
@@ -733,7 +733,7 @@ class RGWFetchAllMetaCR : public RGWCoroutine {
   list<string> result;
   list<string>::iterator iter;
 
-  RGWShardedOmapCRManager *entries_index;
+  std::unique_ptr<RGWShardedOmapCRManager> entries_index;
 
   RGWContinuousLeaseCR *lease_cr;
   RGWCoroutinesStack *lease_stack;
@@ -746,7 +746,7 @@ public:
   RGWFetchAllMetaCR(RGWMetaSyncEnv *_sync_env, int _num_shards,
                     map<uint32_t, rgw_meta_sync_marker>& _markers) : RGWCoroutine(_sync_env->cct), sync_env(_sync_env),
                                                      num_shards(_num_shards),
-                                                     ret_status(0), entries_index(NULL), lease_cr(nullptr), lease_stack(nullptr),
+                                                     ret_status(0), lease_cr(nullptr), lease_stack(nullptr),
                                                       lost_lock(false), failed(false), markers(_markers) {
   }
 
@@ -803,9 +803,9 @@ public:
         set_sleeping(true);
         yield;
       }
-      entries_index = new RGWShardedOmapCRManager(sync_env->async_rados, sync_env->store, this, num_shards,
-                                                 sync_env->store->get_zone_params().log_pool,
-                                                  mdlog_sync_full_sync_index_prefix);
+      entries_index.reset(new RGWShardedOmapCRManager(sync_env->async_rados, sync_env->store, this, num_shards,
+                                                      sync_env->store->get_zone_params().log_pool,
+                                                      mdlog_sync_full_sync_index_prefix));
       yield {
        call(new RGWReadRESTResourceCR<list<string> >(cct, conn, sync_env->http_manager,
                                       "/admin/metadata", NULL, &sections));