From 1c45d3ae0251a167c9ad299095941e4dc98a6472 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sat, 24 Jul 2021 17:01:05 +0800 Subject: [PATCH] crimson: use seastar::try_with_gate to guard background task for less indent, and for more consistency with how tools/store_nbd runs background task. Signed-off-by: Kefu Chai --- src/crimson/admin/admin_socket.cc | 41 +++++++++++++++---------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/crimson/admin/admin_socket.cc b/src/crimson/admin/admin_socket.cc index 76fe5e15e2f90..58710e3beef40 100644 --- a/src/crimson/admin/admin_socket.cc +++ b/src/crimson/admin/admin_socket.cc @@ -225,30 +225,29 @@ seastar::future<> AdminSocket::start(const std::string& path) return seastar::make_ready_future<>(); } // listen in background - task = seastar::do_until( - [this] { return stop_gate.is_closed(); }, - [this] { - return seastar::with_gate(stop_gate, [this] { - assert(!connected_sock.has_value()); - return server_sock->accept().then([this](seastar::accept_result acc) { - connected_sock = std::move(acc.connection); - return seastar::do_with(connected_sock->input(), - connected_sock->output(), - [this](auto& input, auto& output) mutable { - return handle_client(input, output); - }).finally([this] { - assert(connected_sock.has_value()); - connected_sock.reset(); - }); - }).handle_exception([this](auto ep) { - if (!stop_gate.is_closed()) { - logger().error("AdminSocket: terminated: {}", ep); - } + task = seastar::keep_doing([this] { + return seastar::try_with_gate(stop_gate, [this] { + assert(!connected_sock.has_value()); + return server_sock->accept().then([this](seastar::accept_result acc) { + connected_sock = std::move(acc.connection); + return seastar::do_with(connected_sock->input(), + connected_sock->output(), + [this](auto& input, auto& output) mutable { + return handle_client(input, output); + }).finally([this] { + assert(connected_sock.has_value()); + connected_sock.reset(); }); + }).handle_exception([this](auto ep) { + if (!stop_gate.is_closed()) { + logger().error("AdminSocket: terminated: {}", ep); + } }); - }).finally([path] { - return seastar::remove_file(path); }); + }).handle_exception_type([](const seastar::gate_closed_exception&) { + }).finally([path] { + return seastar::remove_file(path); + }); return seastar::make_ready_future<>(); } -- 2.39.5