fix slowness

This commit is contained in:
2025-10-01 21:04:49 -05:00
parent 4bee40228d
commit 04518d7b8c

View File

@@ -65,11 +65,10 @@ void read_exact_with_deadline(boost::asio::io_context &ctx,
std::chrono::milliseconds deadline);
template <class op_t>
auto run_with_deadline(boost::asio::io_context &ctx,
void run_with_deadline(boost::asio::io_context &ctx,
boost::asio::ip::tcp::socket &sock, op_t &&operation,
std::chrono::milliseconds deadline,
std::string event_name, std::string function_name)
-> void;
std::string event_name, std::string function_name);
void write_all_with_deadline(boost::asio::io_context &ctx,
boost::asio::ip::tcp::socket &sock,
@@ -77,11 +76,10 @@ void write_all_with_deadline(boost::asio::io_context &ctx,
std::chrono::milliseconds deadline);
template <class op_t>
auto run_with_deadline(boost::asio::io_context &ctx,
void run_with_deadline(boost::asio::io_context &ctx,
boost::asio::ip::tcp::socket &sock, op_t &&operation,
std::chrono::milliseconds deadline,
std::string event_name, std::string function_name)
-> void {
std::string event_name, std::string function_name) {
deadline = std::max(deadline, std::chrono::milliseconds{250});
struct request_state final {
@@ -106,8 +104,6 @@ auto run_with_deadline(boost::asio::io_context &ctx,
state_ptr->timer.async_wait([state_ptr](auto &&err) {
if (not err and not state_ptr->done) {
state_ptr->timed_out = true;
boost::system::error_code err2;
[[maybe_unused]] auto res = state_ptr->sock.cancel(err2);
}
});
@@ -121,13 +117,16 @@ auto run_with_deadline(boost::asio::io_context &ctx,
ctx.run_one();
}
state_ptr->timer.cancel();
// while (ctx.poll_one() > 0) {
// }
auto timed_out = state_ptr->timed_out.load();
if (timed_out) {
boost::system::error_code err;
[[maybe_unused]] auto res = state_ptr->sock.cancel(err);
}
state_ptr->timer.cancel();
state_ptr->work_guard.reset();
if (state_ptr->timed_out) {
if (timed_out) {
repertory::event_system::instance().raise<repertory::packet_client_timeout>(
event_name, function_name);
throw std::runtime_error(fmt::format("{} timed-out", event_name));