fix timer duration calculations
The code in
gprs_ns.c uses nsvc_timer_elapsed_ms() which relies on osmo_gettimeofday() wrapper around gettimeofday() which is affected by discontinuous jumps in the system time (e.g., if the system administrator manually changes the system time).
It's better to use monotonic clock via clock_gettime(CLOCK_MONOTONIC, ..) but this would requre replacing "
struct timeval" with "
struct timespec" for
timer_started in "
struct gprs_nsvc". I'm not aware of any external users for this field but nevertheless we should properly change API/ABI version when doing so.
On a related note: we should carefully check all the uses of
osmo_gettimeofday() for elapsed time calculations and replace it with monotonic clock.
#3 Updated by msuraev about 2 years ago
- Subject changed from fix NS timer calculations to fix timer duration calculations
- Status changed from New to In Progress
The problem is more widespread than initially anticipated: BSSGP and osmo_timer_* also use non-monotonic osmo_gettimeofday() for duration calculations.