jolly has submitted this change. ( 
https://gerrit.osmocom.org/c/libosmocore/+/35672?usp=email )

Change subject: Prevent poll() in select.c to timeout too early
......................................................................

Prevent poll() in select.c to timeout too early

Adjust osmo_timers_nearest_ms() to round up the remaining time.

Note that poll() has a granularity of 1 millisecond.

Previously, when rounding down the remaining time, osmo_select_main()
would return too early, before the nearest timer timed out.
Consequently, the main loop repeatedly called osmo_select_main() until
the timer actually timed out, resulting in excessive CPU usage.
By modifying osmo_timers_nearest_ms() to round up the remaining time,
we ensure accurate timeout calculations, preventing unnecessary CPU
consumption during the main loop.

The patch only applies to non-embedded version of libosmocore, because
the impact on embedded systems is not verified tested.

Related: OS#6339
Change-Id: I79de77c79af4d50d1eb9ca0c5417123ff760dca3
---
M src/core/timer.c
1 file changed, 34 insertions(+), 0 deletions(-)

Approvals:
  Hoernchen: Looks good to me, approved
  Jenkins Builder: Verified
  laforge: Looks good to me, but someone else must approve




diff --git a/src/core/timer.c b/src/core/timer.c
index 20d87a0..067bd87 100644
--- a/src/core/timer.c
+++ b/src/core/timer.c
@@ -191,7 +191,16 @@
                return -1;

        nearest_ms = nearest_p->tv_sec * 1000;
+#ifndef EMBEDDED
+       /* By adding 999 milliseconds, we ensure rounding up to the nearest
+        * whole millisecond. This approach prevents the return of 0 when the
+        * timer is still active, and it guarantees that the calling process
+        * does not wait for a duration shorter than the time remaining on the
+        * timer. */
+       nearest_ms += (nearest_p->tv_usec + 999) / 1000;
+#else
        nearest_ms += nearest_p->tv_usec / 1000;
+#endif

        return nearest_ms;
 }

-- 
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/35672?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I79de77c79af4d50d1eb9ca0c5417123ff760dca3
Gerrit-Change-Number: 35672
Gerrit-PatchSet: 3
Gerrit-Owner: jolly <andr...@eversberg.eu>
Gerrit-Reviewer: Hoernchen <ew...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: jolly <andr...@eversberg.eu>
Gerrit-Reviewer: laforge <lafo...@osmocom.org>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>
Gerrit-CC: fixeria <vyanits...@sysmocom.de>
Gerrit-MessageType: merged

Reply via email to