From 2e9d0b616e02b243d10b446914652146603d9321 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sat, 19 Dec 2020 18:22:08 +0800 Subject: [PATCH] crimson/osd: capture variable on stack by value start is passed either by std::move() or by a plain value. neither of them ensure that the parameter can outlive the continuations in `RecoveryBackend::scan_for_backfill()`. so, we should capture it by value. Signed-off-by: Kefu Chai --- src/crimson/osd/recovery_backend.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/crimson/osd/recovery_backend.cc b/src/crimson/osd/recovery_backend.cc index f73a981537611..aeec0d14be938 100644 --- a/src/crimson/osd/recovery_backend.cc +++ b/src/crimson/osd/recovery_backend.cc @@ -161,7 +161,7 @@ seastar::future RecoveryBackend::scan_for_backfill( logger().debug("{} starting from {}", __func__, start); auto version_map = seastar::make_lw_shared>(); return backend->list_objects(start, max).then( - [this, &start, version_map] (auto&& ret) { + [this, start, version_map] (auto&& ret) { auto&& [objects, next] = std::move(ret); return seastar::parallel_for_each(std::move(objects), [this, version_map] (const hobject_t& object) { @@ -191,9 +191,9 @@ seastar::future RecoveryBackend::scan_for_backfill( return seastar::now(); }, PGBackend::load_metadata_ertr::assert_all{}); } - }).then([version_map, &start, next=std::move(next), this] { + }).then([version_map, start=std::move(start), next=std::move(next), this] { BackfillInterval bi; - bi.begin = start; + bi.begin = std::move(start); bi.end = std::move(next); bi.version = pg.get_info().last_update; bi.objects = std::move(*version_map); -- 2.39.5