From: Kefu Chai Date: Fri, 7 Aug 2020 16:26:21 +0000 (+0800) Subject: rgw: hold reloader using unique_ptr X-Git-Tag: v15.2.5~6^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F36644%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 5d189b8b7ac0..6102d2d62195 100644 --- a/src/rgw/rgw_main.cc +++ b/src/rgw/rgw_main.cc @@ -600,8 +600,8 @@ int radosgw_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);