From 7c9a3018377c5253a96e57d18619afdb7b6a13b7 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Sat, 14 Jan 2023 09:09:45 +0800 Subject: [PATCH] crimson/os/seastore/omap_manager: fix a capture-by-reference related issue Variables that are not guaranteed to be available as long as the continuations live shouldn't be captured by reference Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/omap_manager.h | 4 ++-- .../omap_manager/btree/btree_omap_manager.cc | 18 +++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/crimson/os/seastore/omap_manager.h b/src/crimson/os/seastore/omap_manager.h index 2eb5d89f4ae..fc4e03e2b9d 100644 --- a/src/crimson/os/seastore/omap_manager.h +++ b/src/crimson/os/seastore/omap_manager.h @@ -175,8 +175,8 @@ public: * * @param omap_root_t &omap_root, omap btree root information * @param Transaction &t, current transaction - * @param string &first, range start, must alive during the call - * @param string &last, range end, must alive during the call + * @param string &first, range start + * @param string &last, range end */ using omap_rm_key_range_iertr = base_iertr; using omap_rm_key_range_ret = omap_rm_key_range_iertr::future<>; diff --git a/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc b/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc index 300eed4eac1..1782d7ee66e 100644 --- a/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc +++ b/src/crimson/os/seastore/omap_manager/btree/btree_omap_manager.cc @@ -198,13 +198,17 @@ BtreeOMapManager::omap_rm_key_range( LOG_PREFIX(BtreeOMapManager::omap_rm_key_range); DEBUGT("{} ~ {}", t, first, last); assert(first <= last); - return omap_list( - omap_root, - t, - first, - last, - config - ).si_then([this, &omap_root, &t](auto results) { + return seastar::do_with( + std::make_optional(first), + std::make_optional(last), + [this, &omap_root, &t, config](auto &first, auto &last) { + return omap_list( + omap_root, + t, + first, + last, + config); + }).si_then([this, &omap_root, &t](auto results) { LOG_PREFIX(BtreeOMapManager::omap_rm_key_range); auto &[complete, kvs] = results; std::vector keys; -- 2.39.5