From: Kefu Chai Date: Fri, 7 Aug 2020 16:26:21 +0000 (+0800) Subject: rgw: hold reloader using unique_ptr X-Git-Tag: v14.2.12~124^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F36770%2Fhead;p=ceph.git rgw: hold reloader using unique_ptr instead of using optional<> for holding reloader, use unique_ptr<>. as `RGWRealmReloader` is neither trivially_copy_{assignable,constructible} nor is_trivially_move_{assignable, constructible}, because of the `Cond` member variable. but Clang++ and libc++ still tries to rely on a delgating copy constructor for constructing the optional instance even the optional object is created `in_place`. in this change, to workaround this issue, reloader is instead constructed using make_unique<> Signed-off-by: Kefu Chai (cherry picked from commit 2494ddbef5ad20cdfccf59911fccadb6f9848da0) --- diff --git a/src/rgw/rgw_main.cc b/src/rgw/rgw_main.cc index 44609741ed74..c0c43a6ebf7b 100644 --- a/src/rgw/rgw_main.cc +++ b/src/rgw/rgw_main.cc @@ -565,8 +565,8 @@ int main(int argc, const char **argv) // add a watcher to respond to realm configuration changes RGWPeriodPusher pusher(store); RGWFrontendPauser pauser(fes, implicit_tenant_context, &pusher); - std::optional reloader(std::in_place, store, - service_map_meta, &pauser); + auto reloader = std::make_unique(store, + service_map_meta, &pauser); RGWRealmWatcher realm_watcher(g_ceph_context, store->svc.zone->get_realm()); realm_watcher.add_watcher(RGWRealmNotify::Reload, *reloader);