Postpone read/write handlers using timerfd in the debug use_sync_send_recv mode

This commit is contained in:
Vitaliy Filippov
2025-06-05 02:22:01 +03:00
parent 67071158bd
commit f0a025428e
2 changed files with 7 additions and 4 deletions
+5 -3
View File
@@ -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();
+2 -1
View File
@@ -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;
}