Mailing List Archive

[Bug 2615] Delay during reception, after a system suspend
https://bugs.exim.org/show_bug.cgi?id=2615

Jeremy Harris <jgh146exb@wizmail.org> changed:

What |Removed |Added
----------------------------------------------------------------------------
Resolution|FIXED |---
Status|RESOLVED |REOPENED

--- Comment #5 from Jeremy Harris <jgh146exb@wizmail.org> ---
The initial fix seems to result in negative logged RT= on Solaris.
I suspect this is just down to the "monotonic" clock being far enough
behind the basic gettimeofday() clock.

--
You are receiving this mail because:
You are on the CC list for the bug.
--
## List details at https://lists.exim.org/mailman/listinfo/exim-dev Exim details at http://www.exim.org/ ##
[Bug 2615] Delay during reception, after a system suspend [ In reply to ]
https://bugs.exim.org/show_bug.cgi?id=2615

--- Comment #6 from Git Commit <git@exim.org> ---
Git commit:
https://git.exim.org/exim.git/commitdiff/8dcd5efb1f89d17b0b214e1face4146d3a1edd28

commit 8dcd5efb1f89d17b0b214e1face4146d3a1edd28
Author: Jeremy Harris <jgh146exb@wizmail.org>
AuthorDate: Tue Aug 31 21:55:00 2021 +0100
Commit: Jeremy Harris <jgh146exb@wizmail.org>
CommitDate: Tue Aug 31 22:06:43 2021 +0100

Avoid using CLOCK_MONOTONIC for $received_time. Bug 2615
---
src/src/receive.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/src/receive.c b/src/src/receive.c
index 2223d46..c2b313c 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)
{

--
You are receiving this mail because:
You are on the CC list for the bug.
--
## List details at https://lists.exim.org/mailman/listinfo/exim-dev Exim details at http://www.exim.org/ ##