mirror of https://gerrit.osmocom.org/libosmocore
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
This commit is contained in:
parent
22790c5d97
commit
e8f05481ea
|
@ -191,7 +191,16 @@ int osmo_timers_nearest_ms(void)
|
|||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue