summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/src/exim.c9
1 files changed, 8 insertions, 1 deletions
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;
}
}