Skip to content

Commit

Permalink
BUG/MINOR: clock: make time jump corrections a bit more accurate
Browse files Browse the repository at this point in the history
Since commit e8b1ad4 ("BUG/MEDIUM: clock: also update the date offset
on time jumps") we try to update the now_offet based on the last known
valid date. But if it's off compared to the global_now_ns date shared
by other threads, we'll get the time off a little bit. When this happens,
we should consider the most recent of these dates so that if the global
date was already known to be more recent, we should use it and stick to
it. This will avoid setting too large an offset that could in turn provoke
a larger jump on another thread.

This is related to issue GH haproxy#2704.

This can be backported to other branches having the patch above.
  • Loading branch information
wtarreau committed Sep 12, 2024
1 parent ad98edd commit af48e4c
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,9 @@ void clock_update_local_date(int max_wait, int interrupted)
if (!interrupted)
now_ns += ms_to_ns(max_wait);

/* consider the most recent known date */
now_ns = MAX(now_ns, HA_ATOMIC_LOAD(&global_now_ns));

/* this event is rare, but it requires proper handling because if
* we just left now_ns where it was, the date will not be updated
* by clock_update_global_date().
Expand Down

0 comments on commit af48e4c

Please sign in to comment.