diff -Naur fetchmail-5.9.14.orig/driver.c fetchmail-5.9.14/driver.c --- fetchmail-5.9.14.orig/driver.c Fri Sep 6 18:52:20 2002 +++ fetchmail-5.9.14/driver.c Fri Sep 6 18:52:35 2002 @@ -67,7 +67,7 @@ int phase; /* where are we, for error-logging purposes? */ int batchcount; /* count of messages sent in current batch */ flag peek_capable; /* can we peek for better error recovery? */ -int mailserver_socket_temp; /* socket to free if connect timeout */ +int mailserver_socket_temp = -1; /* socket to free if connect timeout */ static int timeoutcount; /* count consecutive timeouts */ @@ -745,19 +745,12 @@ sigprocmask(SIG_UNBLOCK, &allsigs, NULL); #endif /* HAVE_SIGPROCMASK */ - /* If there was a connect timeout, the socket should be closed. - * mailserver_socket_temp contains the socket to close. - */ - mailserver_socket = mailserver_socket_temp; - if (js == THROW_SIGPIPE) { signal(SIGPIPE, SIG_IGN); report(stdout, GT_("SIGPIPE thrown from an MDA or a stream socket error\n")); wait(0); - err = PS_SOCKET; - goto cleanUp; } else if (js == THROW_TIMEOUT) { @@ -806,17 +799,10 @@ close_warning_by_mail(ctl, (struct msgblk *)NULL); ctl->wedged = TRUE; } - - err = PS_ERROR; } - /* try to clean up all streams */ - release_sink(ctl); - smtp_close(ctl, 0); - if (mailserver_socket != -1) { - cleanupSockClose(mailserver_socket); - mailserver_socket = -1; - } + err = PS_SOCKET; + goto cleanUp; } else { @@ -1428,7 +1414,21 @@ stage = STAGE_LOGOUT; (ctl->server.base_protocol->logout_cmd)(mailserver_socket, ctl); } - cleanupSockClose(mailserver_socket); + + /* try to clean up all streams */ + release_sink(ctl); + smtp_close(ctl, 0); + if (mailserver_socket != -1) { + cleanupSockClose(mailserver_socket); + mailserver_socket = -1; + } + /* If there was a connect timeout, the socket should be closed. + * mailserver_socket_temp contains the socket to close. + */ + if (mailserver_socket_temp != -1) { + cleanupSockClose(mailserver_socket_temp); + mailserver_socket_temp = -1; + } } msg = (const char *)NULL; /* sacrifice to -Wall */ diff -Naur fetchmail-5.9.14.orig/sink.c fetchmail-5.9.14/sink.c --- fetchmail-5.9.14.orig/sink.c Fri Sep 6 18:52:20 2002 +++ fetchmail-5.9.14/sink.c Fri Sep 6 18:52:35 2002 @@ -1208,7 +1208,13 @@ /* release the per-message output sink, whether it's a pipe or SMTP socket */ { if (ctl->bsmtp && sinkfp) - fclose(sinkfp); + { + if (strcmp(ctl->bsmtp, "-")) + { + fclose(sinkfp); + sinkfp = (FILE *)NULL; + } + } else if (ctl->mda) { if (sinkfp) @@ -1253,7 +1259,10 @@ fputs(".\r\n", sinkfp); error = ferror(sinkfp); if (strcmp(ctl->bsmtp, "-")) + { if (fclose(sinkfp) == EOF) error = 1; + sinkfp = (FILE *)NULL; + } if (error) { report(stderr,