return in.close();
}).handle_exception([](auto ep) {
logger().debug("exception on {}: {}", __func__, ep);
- return seastar::make_ready_future<>();
- }).discard_result();
+ });
}
seastar::future<> AdminSocket::start(const std::string& path)
auto sock_path = seastar::socket_address{ seastar::unix_domain_addr{ path } };
server_sock = seastar::engine().listen(sock_path);
// listen in background
- std::ignore = seastar::do_until(
+ task = seastar::do_until(
[this] { return stop_gate.is_closed(); },
[this] {
return seastar::with_gate(stop_gate, [this] {
}
});
});
- }).then([] {
- logger().debug("AdminSocket::init(): admin-sock thread terminated");
- return seastar::now();
});
-
return seastar::make_ready_future<>();
}
return seastar::now();
}
server_sock->abort_accept();
- server_sock.reset();
if (connected_sock) {
connected_sock->shutdown_input();
connected_sock->shutdown_output();
- connected_sock.reset();
}
- return stop_gate.close();
+ return stop_gate.close().then([this] {
+ assert(task.has_value());
+ return task->then([] {
+ logger().info("AdminSocket: stopped");
+ return seastar::now();
+ });
+ });
}
/////////////////////////////////////////
seastar::future<tell_result_t> execute_command(const std::vector<std::string>& cmd,
ceph::bufferlist&& buf);
+ std::optional<seastar::future<>> task;
std::optional<seastar::server_socket> server_sock;
std::optional<seastar::connected_socket> connected_sock;