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