[SA-exim] SA-Exim timeout

Tim Jackson lists at timj.co.uk
Mon, 21 Oct 2002 12:20:40 +0100


Hi all,

OK, I think the timeout we've been discussing is a bug in SA-E, with SA-E
getting caught in a loop. Basically, if I'm right, 'ret' is being re-used
and overwritten when we don't want it to be.

Here's a preliminary patch that seems to fix it (warning: not at all
properly tested!).


--- sa-exim-2.1/sa-exim.c.orig	Mon Oct 14 04:27:57 2002
+++ sa-exim-2.1/sa-exim.c	Mon Oct 21 11:58:52 2002
@@ -312,6 +312,7 @@
 {
 #warning you shouldn''t worry about the "might be clobbered by longjmp",
see source
     int ret;
+    int ret_read;
     int pid;
     int writefd[2];
     int readfd[2];
@@ -618,12 +619,12 @@
      * than SA is going to process, but let's send at least one byte more
for
      * spamc to do the size cutoff, not us */
     chunk=(samaxbody+1 / sizeof(buffera));
-    while ((ret=read(fd, buffer, sizeof(buffera))) > 0 && chunk-- > 0)
+    while ((ret_read=read(fd, buffer, sizeof(buffera))) > 0 && chunk-- >
0)
     {
 	ret=write(writefd[1], buffer, ret);
 	CHECKERR(ret,"body write",__LINE__);
     }
-    CHECKERR(ret, "read body", __LINE__ - 4);
+    CHECKERR(ret_read, "read body", __LINE__ - 4);
     close(writefd[1]);
 
     if (SAEximDebug > 5)
@@ -813,6 +814,7 @@
     afterscan=time(NULL);
     scantime=afterscan-beforescan;
 
+    ret=0;
     wait(&ret);
     if (ret)
     {