From: Yehuda Sadeh Date: Tue, 3 May 2016 01:13:17 +0000 (-0700) Subject: rgw: RGWDataSyncStatusManager, cleanup if failing init X-Git-Tag: v11.0.0~611^2~9 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=14cd44e0847fd914068f48dd0208ce7c1fe4eecb;p=ceph.git rgw: RGWDataSyncStatusManager, cleanup if failing init init can be called more than once, ended up with leaking some resources Signed-off-by: Yehuda Sadeh --- diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 74e2498f24a8..8a483ff77c4f 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -1354,6 +1354,7 @@ int RGWDataSyncStatusManager::init() r = source_log.init(source_zone, conn, error_logger); if (r < 0) { lderr(store->ctx()) << "ERROR: failed to init remote log, r=" << r << dendl; + finalize(); return r; } @@ -1361,6 +1362,7 @@ int RGWDataSyncStatusManager::init() r = source_log.read_log_info(&datalog_info); if (r < 0) { ldout(store->ctx(), 5) << "ERROR: master.read_log_info() returned r=" << r << dendl; + finalize(); return r; } @@ -1373,6 +1375,13 @@ int RGWDataSyncStatusManager::init() return 0; } +void RGWDataSyncStatusManager::finalize() +{ + delete error_logger; + error_logger = nullptr; + ioctx.close(); +} + string RGWDataSyncStatusManager::sync_status_oid(const string& source_zone) { char buf[datalog_sync_status_oid_prefix.size() + source_zone.size() + 16]; diff --git a/src/rgw/rgw_data_sync.h b/src/rgw/rgw_data_sync.h index a2b2451db0a0..33b723ac3783 100644 --- a/src/rgw/rgw_data_sync.h +++ b/src/rgw/rgw_data_sync.h @@ -242,9 +242,10 @@ public: : store(_store), source_zone(_source_zone), conn(NULL), error_logger(NULL), source_log(store, async_rados), num_shards(0) {} ~RGWDataSyncStatusManager() { - delete error_logger; + finalize(); } int init(); + void finalize(); rgw_data_sync_status& get_sync_status() { return sync_status; } diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 977a70a552ca..6803ebfc228f 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -2947,7 +2947,10 @@ public: } int process() { - while (!going_down()) { + while (!initialized) { + if (going_down()) { + return 0; + } int ret = sync.init(); if (ret >= 0) { initialized = true;