From 189a93c71d4cfc1fe68eb16cc360254216d5da35 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Fri, 3 Apr 2026 03:29:51 +0300 Subject: [PATCH] fix cpu consume at idle --- lib/u_async.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/u_async.c b/lib/u_async.c index f3837bf..3bb00db 100644 --- a/lib/u_async.c +++ b/lib/u_async.c @@ -867,20 +867,19 @@ void uasync_poll(struct UASYNC* ua, int timeout_tb) { req_timeout.tv_usec = (timeout_tb % 10000) * 100; } - // Use minimum of requested and next timer if both finite - struct timeval poll_timeout; - if (timeout_tb < 0) { - // Infinite requested - use next timer if any - poll_timeout = next_timeout; - } else { - // Finite requested - min of requested and next - if (next_timeout.tv_sec < req_timeout.tv_sec || - (next_timeout.tv_sec == req_timeout.tv_sec && next_timeout.tv_usec < req_timeout.tv_usec)) { - poll_timeout = next_timeout; - } else { - poll_timeout = req_timeout; - } - } + struct timeval poll_timeout; + if (timeout_tb < 0) { + poll_timeout = next_timeout; + } else { + if (next_timeout.tv_sec < req_timeout.tv_sec || + (next_timeout.tv_sec == req_timeout.tv_sec && next_timeout.tv_usec < req_timeout.tv_usec)) { + poll_timeout = next_timeout; + } else { + poll_timeout = req_timeout; + } + } + if (poll_timeout.tv_sec == 0 && poll_timeout.tv_usec == 0 && timeout_tb > 0) poll_timeout = req_timeout; + int timeout_ms; if (timeout_tb < 0 && (next_timeout.tv_sec > 0 || next_timeout.tv_usec > 0)) {