From 00bf9021d33a0c6125422ffd10278670b72d5eb2 Mon Sep 17 00:00:00 2001 From: "Adam C. Emerson" Date: Mon, 9 Nov 2020 22:14:24 -0500 Subject: [PATCH] osdc: Don't keep wrapping completion in wait_for_latest_osdmap Also remove unsafe use of dispatch. Signed-off-by: Adam C. Emerson --- src/osdc/Objecter.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index e76bb68ad80c6..3d2b967d2fa61 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -2503,6 +2503,7 @@ public: ceph::coarse_mono_time sent, uint32_t register_gen); boost::system::error_code _normalize_watch_error(boost::system::error_code ec); + friend class CB_Objecter_GetVersion; friend class CB_DoWatchError; public: template @@ -2665,7 +2666,7 @@ private: unique_lock l(rwlock); if (osdmap->get_epoch()) { l.unlock(); - boost::asio::dispatch(std::move(init.completion_handler)); + boost::asio::post(std::move(init.completion_handler)); } else { waiting_for_map[0].emplace_back( OpCompletion::create( @@ -2751,7 +2752,7 @@ public: version_t oldest) { if (ec == boost::system::errc::resource_unavailable_try_again) { // try again as instructed - objecter->wait_for_latest_osdmap(std::move(fin)); + objecter->_wait_for_latest_osdmap(std::move(*this)); } else if (ec) { ceph::async::post(std::move(fin), ec); } else { @@ -2785,6 +2786,13 @@ public: void _wait_for_new_map(std::unique_ptr, epoch_t epoch, boost::system::error_code = {}); +private: + void _wait_for_latest_osdmap(CB_Objecter_GetVersion&& c) { + monc->get_version("osdmap", std::move(c)); + } + +public: + template typename boost::asio::async_result::return_type wait_for_latest_osdmap(CompletionToken&& token) { -- 2.39.5