From bc1e1116f58ada34c4664791bf77b278f7f82488 Mon Sep 17 00:00:00 2001 From: chunmei-liu Date: Tue, 15 Feb 2022 19:13:15 -0800 Subject: [PATCH] crimson/seastore: put ObjectDataHandler instance into do_with make ObjectDataHandler instance alive before sub functions are resolved. Signed-off-by: chunmei-liu --- src/crimson/os/seastore/seastore.cc | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index 0323f81e956e6..3c17d90be196a 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -1145,8 +1145,9 @@ SeaStore::tm_ret SeaStore::_write( } return seastar::do_with( std::move(_bl), - [=, &ctx, &onode](auto &bl) { - return ObjectDataHandler(max_object_size).write( + ObjectDataHandler(max_object_size), + [=, &ctx, &onode](auto &bl, auto &objhandler) { + return objhandler.write( ObjectDataHandler::context_t{ *transaction_manager, *ctx.transaction, @@ -1278,13 +1279,17 @@ SeaStore::tm_ret SeaStore::_truncate( LOG_PREFIX(SeaStore::_truncate); DEBUGT("onode={} size={}", *ctx.transaction, *onode, size); onode->get_mutable_layout(*ctx.transaction).size = size; - return ObjectDataHandler(max_object_size).truncate( - ObjectDataHandler::context_t{ - *transaction_manager, - *ctx.transaction, - *onode - }, - size); + return seastar::do_with( + ObjectDataHandler(max_object_size), + [=, &ctx, &onode](auto &objhandler) { + return objhandler.truncate( + ObjectDataHandler::context_t{ + *transaction_manager, + *ctx.transaction, + *onode + }, + size); + }); } SeaStore::tm_ret SeaStore::_setattrs( -- 2.39.5