fix slowness
This commit is contained in:
@@ -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));
|
||||
|
Reference in New Issue
Block a user