Shorten RX deadline immediately when a sleeping peer wakes

This commit is contained in:
evgeny committed 2026-10-12 01:34:44 +02:00
1 parent 2e66cdb122
commit 85b4af5b1d
2 files changed
+26 -2

No files matched your search

+7 -1
View File
@@ -159,8 +159,14 @@ void etcp_keepalive_watch_rx(struct ETCP_LINK* link) {
sleep_ms += (uint64_t)link->keepalive_interval * KA_TIMEOUT_MULT;
if (sleep_ms > timeout_ms) timeout_ms = sleep_ms;
}
uint64_t previous_deadline = link->rx_deadline_tb;
link->rx_deadline_tb = link->last_recv_local_time + timeout_ms * 10;
if (link->rx_timeout_timer) return;
if (link->rx_timeout_timer && link->rx_deadline_tb >= previous_deadline) return;
if (link->rx_timeout_timer) {
uasync_cancel_timeout(link->etcp->instance->ua, link->rx_timeout_timer); link->rx_timeout_timer = NULL;
DEBUG_DEBUG(DEBUG_CATEGORY_KEEPALIVE, "[%s] RX deadline shortened link=%u timeout_ms=%llu",
link->etcp->log_name, link->local_link_id, (unsigned long long)timeout_ms);
}
uint64_t now = get_time_tb();
uint64_t remaining = link->rx_deadline_tb > now ? link->rx_deadline_tb - now : 1;
int delay = remaining > INT_MAX ? INT_MAX : (int)remaining;