From fce5c23c3e21a41f8be6035408437fda63bac10a Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Fri, 13 Dec 2019 00:41:01 +0000 Subject: [PATCH] Handle kernels not providing microsecond time resolution --- src/src/exim.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/src/exim.c b/src/src/exim.c index 8c3c8e7ed..72bf65e72 100644 --- a/src/src/exim.c +++ b/src/src/exim.c @@ -407,7 +407,7 @@ long int now_true_usec; now_true_usec = now_tv.tv_usec; now_tv.tv_usec = (now_true_usec/resolution) * resolution; -if (exim_tvcmp(&now_tv, then_tv) <= 0) +while (exim_tvcmp(&now_tv, then_tv) <= 0) { struct itimerval itval; itval.it_interval.tv_sec = 0; @@ -439,6 +439,13 @@ if (exim_tvcmp(&now_tv, then_tv) <= 0) } milliwait(&itval); + + /* Be prapared to go around if the kernel does not implement subtick + granularity (GNU Hurd) */ + + (void)gettimeofday(&now_tv, NULL); + now_true_usec = now_tv.tv_usec; + now_tv.tv_usec = (now_true_usec/resolution) * resolution; } } -- 2.30.2