From: Timo Sirainen Date: Fri, 27 Oct 2017 23:45:58 +0000 (+0300) Subject: mail-filter: ostream-ext-filter - Require o_stream_finish() to be called X-Git-Tag: 2.3.0.rc1~700 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ec2c310074340f3020c9ef2b9ab3bfd207e3c31d;p=thirdparty%2Fdovecot%2Fcore.git mail-filter: ostream-ext-filter - Require o_stream_finish() to be called Similar to ostream-zlib. --- diff --git a/src/plugins/mail-filter/ostream-ext-filter.c b/src/plugins/mail-filter/ostream-ext-filter.c index 9d3c91dc9c..8d20b7bf28 100644 --- a/src/plugins/mail-filter/ostream-ext-filter.c +++ b/src/plugins/mail-filter/ostream-ext-filter.c @@ -17,7 +17,7 @@ struct mail_filter_ostream { int fd; struct istream *ext_in; struct ostream *ext_out; - bool flushed; + bool finished; }; static void @@ -61,7 +61,7 @@ o_stream_mail_filter_sendv(struct ostream_private *stream, return ret; } -static int o_stream_mail_filter_flush(struct ostream_private *stream) +static int o_stream_mail_filter_finish(struct ostream_private *stream) { struct mail_filter_ostream *mstream = (struct mail_filter_ostream *)stream; @@ -73,7 +73,7 @@ static int o_stream_mail_filter_flush(struct ostream_private *stream) /* connect failed */ return -1; } - if (mstream->flushed) + if (mstream->finished) return 0; if (shutdown(mstream->fd, SHUT_WR) < 0) @@ -106,11 +106,20 @@ static int o_stream_mail_filter_flush(struct ostream_private *stream) return -1; } - ret = o_stream_flush(stream->parent); - if (ret < 0) + mstream->finished = TRUE; + return ret; +} + +static int o_stream_mail_filter_flush(struct ostream_private *stream) +{ + int ret; + + if (stream->finished) { + if ((ret = o_stream_mail_filter_finish(stream)) <= 0) + return ret; + } + if ((ret = o_stream_flush(stream->parent)) < 0) o_stream_copy_error_from_parent(stream); - else - mstream->flushed = TRUE; return ret; }