]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: delete entries_index in RGWFetchAllMetaCR 11816/head
authorCasey Bodley <cbodley@redhat.com>
Fri, 4 Nov 2016 16:18:32 +0000 (12:18 -0400)
committerCasey Bodley <cbodley@redhat.com>
Mon, 7 Nov 2016 18:08:11 +0000 (13:08 -0500)
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>
src/rgw/rgw_sync.cc

index b34e7fe6891667faa5cbe4e67f845b937e94c1e9..e78dc98d2a702d4e7a81c7b36978e33e7141dada 100644 (file)
@@ -735,7 +735,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;
@@ -748,7 +748,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) {
   }
 
@@ -805,9 +805,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));