From: Samuel Thibault Date: Fri, 13 Dec 2019 00:41:01 +0000 (+0000) Subject: Handle kernels not providing microsecond time resolution X-Git-Url: https://git.exim.org/users/jgh/exim.git/commitdiff_plain/fce5c23c3e21a41f8be6035408437fda63bac10a?ds=inline Handle kernels not providing microsecond time resolution --- 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; } }