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);
|
std::chrono::milliseconds deadline);
|
||||||
|
|
||||||
template <class op_t>
|
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,
|
boost::asio::ip::tcp::socket &sock, op_t &&operation,
|
||||||
std::chrono::milliseconds deadline,
|
std::chrono::milliseconds deadline,
|
||||||
std::string event_name, std::string function_name)
|
std::string event_name, std::string function_name);
|
||||||
-> void;
|
|
||||||
|
|
||||||
void write_all_with_deadline(boost::asio::io_context &ctx,
|
void write_all_with_deadline(boost::asio::io_context &ctx,
|
||||||
boost::asio::ip::tcp::socket &sock,
|
boost::asio::ip::tcp::socket &sock,
|
||||||
@@ -77,11 +76,10 @@ void write_all_with_deadline(boost::asio::io_context &ctx,
|
|||||||
std::chrono::milliseconds deadline);
|
std::chrono::milliseconds deadline);
|
||||||
|
|
||||||
template <class op_t>
|
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,
|
boost::asio::ip::tcp::socket &sock, op_t &&operation,
|
||||||
std::chrono::milliseconds deadline,
|
std::chrono::milliseconds deadline,
|
||||||
std::string event_name, std::string function_name)
|
std::string event_name, std::string function_name) {
|
||||||
-> void {
|
|
||||||
deadline = std::max(deadline, std::chrono::milliseconds{250});
|
deadline = std::max(deadline, std::chrono::milliseconds{250});
|
||||||
|
|
||||||
struct request_state final {
|
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) {
|
state_ptr->timer.async_wait([state_ptr](auto &&err) {
|
||||||
if (not err and not state_ptr->done) {
|
if (not err and not state_ptr->done) {
|
||||||
state_ptr->timed_out = true;
|
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();
|
ctx.run_one();
|
||||||
}
|
}
|
||||||
|
|
||||||
state_ptr->timer.cancel();
|
auto timed_out = state_ptr->timed_out.load();
|
||||||
// while (ctx.poll_one() > 0) {
|
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();
|
state_ptr->work_guard.reset();
|
||||||
|
|
||||||
if (state_ptr->timed_out) {
|
if (timed_out) {
|
||||||
repertory::event_system::instance().raise<repertory::packet_client_timeout>(
|
repertory::event_system::instance().raise<repertory::packet_client_timeout>(
|
||||||
event_name, function_name);
|
event_name, function_name);
|
||||||
throw std::runtime_error(fmt::format("{} timed-out", event_name));
|
throw std::runtime_error(fmt::format("{} timed-out", event_name));
|
||||||
|
|||||||
Reference in New Issue
Block a user