diff options
author | Jeremy Harris <jgh146exb@wizmail.org> | 2021-08-31 21:55:00 +0100 |
---|---|---|
committer | Jeremy Harris <jgh146exb@wizmail.org> | 2021-08-31 22:06:43 +0100 |
commit | 8dcd5efb1f89d17b0b214e1face4146d3a1edd28 (patch) | |
tree | 7f579eb15e1e51ee58b9f832ae48e6779c39b4ce | |
parent | 6b69b71028f15c7ba3157bac955103b764326f60 (diff) |
Avoid using CLOCK_MONOTONIC for $received_time. Bug 2615
-rw-r--r-- | src/src/receive.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/src/receive.c b/src/src/receive.c index 2223d4645..c2b313c63 100644 --- a/src/src/receive.c +++ b/src/src/receive.c @@ -1788,15 +1788,19 @@ if (sender_host_address) dmarc_init(); /* initialize libopendmarc */ /* Remember the time of reception. Exim uses time+pid for uniqueness of message ids, and fractions of a second are required. See the comments that precede the -message id creation below. */ +message id creation below. +We use a routine that if possible uses a monotonic clock, and can be used again +after reception for the tick-wait even under the Linux non-Posix behaviour. */ exim_gettime(&message_id_tv); /* For other uses of the received time we can operate with granularity of one second, and for that we use the global variable received_time. This is for -things like ultimate message timeouts. */ +things like ultimate message timeouts. +For this we do not care about the Linux suspend/resume problem, so rather than +use exim_gettime() everywhere we use a plain gettimeofday() here. */ -received_time = message_id_tv; +gettimeofday(&received_time, NULL); /* If SMTP input, set the special handler for timeouts. The alarm() calls happen in the smtp_getc() function when it refills its buffer. */ @@ -4326,7 +4330,10 @@ pid can be re-used within our time interval. We can't shorten the interval without re-designing the message-id. See comments above where the message id is created. This is Something For The Future. Do this wait any time we have created a message-id, even if we rejected the -message. This gives unique IDs for logging done by ACLs. */ +message. This gives unique IDs for logging done by ACLs. +The initial timestamp must have been obtained via exim_gettime() to avoid +issues on Linux with suspend/resume. +It would be Nicer to only pause before a follow-on message. */ if (id_resolution != 0) { |