]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.9-20110126
authorWietse Venema <wietse@porcupine.org>
Wed, 26 Jan 2011 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:37:08 +0000 (06:37 +0000)
postfix/HISTORY
postfix/src/global/mail_version.h
postfix/src/global/smtp_stream.c
postfix/src/global/smtp_stream.h
postfix/src/smtpd/smtpd.c
postfix/src/smtpd/smtpd_chat.c
postfix/src/util/vstream.c

index 4f44458f32c4ed8d0df4b11631eccb99ebb0d227..67300977634707128c524cc9f333df5ff4bcd746 100644 (file)
@@ -16528,8 +16528,10 @@ Apologies for any names omitted.
        Cleanup: remove #ifdef MIGRATION_WARNING transitional code
        from postscreen. File: postscreen/postscreen.c.
 
-20110124
+20110125
 
-       Cleanup: use the right primitive to flush responses when
-       the Postfix SMTP server is taking an excessive amount of
-       time to process client requests. File: smtpd/smtpd_chat.c.
+       Cleaned up and finalized read/write deadline support. Once
+       this code has been fielded it can go into Postfix 2.8.1,
+       and made available as optional patch for earlier releases.
+       Further refinements have only dimishing returns and can
+       evolve in the 2.9 release cycle.  File: util/vstream.c.
index 58c4b5156110a4abf5f3ac63d67515b433a8b72f..f4530001190b06c4b1a3f35933d7dafd24af9042 100644 (file)
@@ -20,7 +20,7 @@
   * Patches change both the patchlevel and the release date. Snapshots have no
   * patchlevel; they change the release date only.
   */
-#define MAIL_RELEASE_DATE      "20110125"
+#define MAIL_RELEASE_DATE      "20110126"
 #define MAIL_VERSION_NUMBER    "2.9"
 
 #ifdef SNAPSHOT
index 4978514a2d7e3996c3d4c275912192371827ecdb..b404244dd941014ba5be2802859a8ed15f60ad0b 100644 (file)
@@ -10,9 +10,6 @@
 /*     VSTREAM *stream;
 /*     int     timeout;
 /*
-/*     void    smtp_timeout_reset(stream)
-/*     VSTREAM *stream;
-/*
 /*     void    smtp_printf(stream, format, ...)
 /*     VSTREAM *stream;
 /*     const char *format;
 /* .IP \f(bu
 /*     The stream is configured to enable exception handling.
 /* .PP
-/*     smtp_timeout_reset() clears the error flags and restarts
-/*     the deadline timer for the named stream. This leaves the
-/*     stream in a state that is suitable for the final "flush
-/*     before close" operation, without depending on any other
-/*     primitives provided by this module.
-/*
 /*     smtp_printf() formats its arguments and writes the result to
 /*     the named stream, followed by a CR LF pair. The stream is NOT flushed.
 /*     Long lines of text are not broken.
 
 #include "smtp_stream.h"
 
-/* smtp_timeout_reset - reset per-stream error flags and read/write deadline */
+/* smtp_timeout_reset - reset per-stream error flags, restart deadline timer */
 
-void smtp_timeout_reset(VSTREAM *stream)
+static void smtp_timeout_reset(VSTREAM *stream)
 {
     vstream_clearerr(stream);
 
@@ -348,7 +339,7 @@ int     smtp_get(VSTRING *vp, VSTREAM *stream, ssize_t bound)
 
 void    smtp_fputs(const char *cp, ssize_t todo, VSTREAM *stream)
 {
-    ssize_t  err;
+    ssize_t err;
 
     if (todo < 0)
        msg_panic("smtp_fputs: negative todo %ld", (long) todo);
@@ -375,7 +366,7 @@ void    smtp_fputs(const char *cp, ssize_t todo, VSTREAM *stream)
 
 void    smtp_fwrite(const char *cp, ssize_t todo, VSTREAM *stream)
 {
-    ssize_t  err;
+    ssize_t err;
 
     if (todo < 0)
        msg_panic("smtp_fwrite: negative todo %ld", (long) todo);
index c481d0b9b609f59176c890e87d034bee6710e4b5..5593922164404cf73475565576c3e36b842788c3 100644 (file)
@@ -33,7 +33,6 @@
 #define SMTP_ERR_NONE  4               /* non-error case */
 
 extern void smtp_timeout_setup(VSTREAM *, int);
-extern void smtp_timeout_reset(VSTREAM *);
 extern void PRINTFLIKE(2, 3) smtp_printf(VSTREAM *, const char *,...);
 extern void smtp_flush(VSTREAM *);
 extern int smtp_fgetc(VSTREAM *);
index c37c1523e1a3caf74f4048dd3f48075e5d027292..3dd9367b928b855a8f88d111c0af7bcb159efab8 100644 (file)
@@ -4667,7 +4667,6 @@ static void smtpd_proto(SMTPD_STATE *state)
        }
        break;
     }
-    smtp_timeout_reset(state->client);
 
     /*
      * XXX The client connection count/rate control must be consistent in its
index 41c1884f109c62252613f1c218cd25fccbaaf2bf..da6e80ce657713896a50bab7d777fef83dbfc310 100644 (file)
@@ -199,7 +199,7 @@ void    smtpd_chat_reply(SMTPD_STATE *state, const char *format,...)
      * delays (tarpit delays or DNS lookups for UCE restrictions).
      */
     if (delay || time((time_t *) 0) - vstream_ftime(state->client) > 10)
-       smtp_flush(state->client);              /* fix 20110124 */
+       vstream_fflush(state->client);
 
     /*
      * Abort immediately if the connection is broken.
index 9ee143a815bdbc684fad889701156a8186caf87d..2c45683af384c5a28246b7a20bf6b7b602924636 100644 (file)
@@ -669,8 +669,10 @@ static int vstream_fflush_some(VSTREAM *stream, ssize_t to_flush)
            timeout = stream->timeout;
        if ((n = stream->write_fn(stream->fd, data, len, timeout, stream->context)) <= 0) {
            bp->flags |= VSTREAM_FLAG_ERR;
-           if (errno == ETIMEDOUT)
+           if (errno == ETIMEDOUT) {
                bp->flags |= VSTREAM_FLAG_TIMEOUT;
+               stream->time_limit.tv_sec = stream->time_limit.tv_usec = 0;
+           }
            return (VSTREAM_EOF);
        }
        if (timeout)
@@ -816,8 +818,10 @@ static int vstream_buf_get_ready(VBUF *bp)
     switch (n = stream->read_fn(stream->fd, bp->data, bp->len, timeout, stream->context)) {
     case -1:
        bp->flags |= VSTREAM_FLAG_ERR;
-       if (errno == ETIMEDOUT)
+       if (errno == ETIMEDOUT) {
            bp->flags |= VSTREAM_FLAG_TIMEOUT;
+           stream->time_limit.tv_sec = stream->time_limit.tv_usec = 0;
+       }
        return (VSTREAM_EOF);
     case 0:
        bp->flags |= VSTREAM_FLAG_EOF;