From 7717d69561a5495ea5ca9f5760847535ef13a904 Mon Sep 17 00:00:00 2001 From: Pascal Martin Date: Sun, 8 Jan 2023 11:11:53 -0800 Subject: [PATCH] tv_usec must always be positive --- hc_clock.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hc_clock.c b/hc_clock.c index e11ee51..94ab4ab 100644 --- a/hc_clock.c +++ b/hc_clock.c @@ -185,6 +185,12 @@ static void hc_clock_adjust (time_t drift) { delta.tv_sec = (drift / 1000); delta.tv_usec = (drift % 1000) * 1000; + if (delta.tv_usec < 0) { + // Per the GNU libc documentation, tv_usec must be positive, and + // microsecond time = (tv_sec * 1000000) + tv_usec. + delta.tv_sec -= 1; + delta.tv_usec += 1000000; + } if (adjtime (&delta, NULL) != 0) { printf ("adjtime() error %d\n", errno); }