From f0a025428e94ab2e02958b7a28cd9e4f826a2d99 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Thu, 5 Jun 2025 02:08:37 +0300 Subject: [PATCH] Postpone read/write handlers using timerfd in the debug use_sync_send_recv mode --- src/client/msgr_receive.cpp | 8 +++++--- src/client/msgr_send.cpp | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/client/msgr_receive.cpp b/src/client/msgr_receive.cpp index 290b11ad..a0afb345 100644 --- a/src/client/msgr_receive.cpp +++ b/src/client/msgr_receive.cpp @@ -8,11 +8,12 @@ void osd_messenger_t::read_requests() for (int i = 0; i < read_ready_clients.size(); i++) { int peer_fd = read_ready_clients[i]; - osd_client_t *cl = clients[peer_fd]; - if (cl->read_msg.msg_iovlen) + auto cl_it = clients.find(peer_fd); + if (cl_it == clients.end() || !cl_it->second || cl_it->second->read_msg.msg_iovlen) { continue; } + auto cl = cl_it->second; if (cl->read_remaining < receive_buffer_size) { cl->read_iov.iov_base = cl->in_buf; @@ -60,7 +61,8 @@ void osd_messenger_t::read_requests() { result = -errno; } - handle_read(result, cl); + // like set_immediate + tfd->set_timer_us(0, false, [this, result, cl](int){ handle_read(result, cl); }); } } read_ready_clients.clear(); diff --git a/src/client/msgr_send.cpp b/src/client/msgr_send.cpp index dc659ba5..80ac9117 100644 --- a/src/client/msgr_send.cpp +++ b/src/client/msgr_send.cpp @@ -239,7 +239,8 @@ bool osd_messenger_t::try_send(osd_client_t *cl) { result = -errno; } - handle_send(result, false, false, cl); + // like set_immediate + tfd->set_timer_us(0, false, [this, result, cl](int){ handle_send(result, false, false, cl); }); } return true; }