RE: [Exim] frozen after connect timeout

Top Page
Delete this message
Reply to this message
Author: Mike Bethune
Date:  
To: exim-users, A. Wik
Subject: RE: [Exim] frozen after connect timeout
> That's just a workaround, to avoid the freezing. It would be
> nice if we
> could find the underlying cause of the SIGALRM crash, because
> it should
> never happen.


I also had earlier made the same exact change to deliver.c as A.Wik, but as Philip mentions above it only works around the freezing.

If connect_timeout option is not set (default of course) then exim behaves normally, ie when a timeout occurs, it is properly deferred and not frozen, log shows:
defer (110): Connection timed out

but if connect_timeout is set, the log shows:
defer (-1): smtp transport process returned non-zero status 0x000e: terminated by signal 14
(and without below patch the message is frozen)

My system is linux, kernel 2.4.20, glibc 2.2.4
But for the real problem, I guess the alarm handler set by sigaction() isn't being set?

Thanks,


--- exim-4.31/src/deliver.c.orig        Tue Apr 13 20:27:34 2004
+++ exim-4.31/src/deliver.c     Tue Apr 13 20:27:52 2004
@@ -3136,7 +3136,7 @@ set_process_info("delivering %s", messag
 addrlist = parlist[poffset].addrlist;
 /* If the process did not finish cleanly, record an error and freeze (except
-for SIGTERM, SIGKILL and SIGQUIT), and also ensure the journal is not removed,
+for SIGTERM, SIGKILL, SIGQUIT and SIGALRM), and also ensure the journal is not removed,
 in case the delivery did actually happen. */
 if ((status & 0xffff) != 0)
@@ -3153,7 +3153,7 @@ if ((status & 0xffff) != 0)
     (msb == 0)? "terminated by signal" : "exit code",
     code);
-  if (msb != 0 || (code != SIGTERM && code != SIGKILL && code != SIGQUIT))
+  if (msb != 0 || (code != SIGTERM && code != SIGKILL && code != SIGQUIT && code != SIGALRM))
     addrlist->special_action = SPECIAL_FREEZE;
   for (addr = addrlist; addr != NULL; addr = addr->next)