]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
zlib: Make sure output stream flushes the stream automatically when not corked.
authorTimo Sirainen <tss@iki.fi>
Fri, 21 Jan 2011 17:15:37 +0000 (19:15 +0200)
committerTimo Sirainen <tss@iki.fi>
Fri, 21 Jan 2011 17:15:37 +0000 (19:15 +0200)
Fixes hangs with IMAP COMPRESS extension.

src/plugins/zlib/ostream-zlib.c

index a3f9dc35abc32ac8b660dca519d200dfa70f4486..bd2b27a701fd6e5aea3b89a63135977ddad040dd 100644 (file)
@@ -129,7 +129,8 @@ o_stream_zlib_send_chunk(struct zlib_ostream *zstream,
        }
        zstream->crc = crc32_data_more(zstream->crc, data, size);
        zstream->bytes32 += size;
-       zstream->flushed = FALSE;
+       zstream->flushed = flush == Z_SYNC_FLUSH &&
+               zs->avail_out == sizeof(zstream->outbuf);
        return 0;
 }
 
@@ -222,8 +223,12 @@ o_stream_zlib_sendv(struct ostream_private *stream,
                        return -1;
                bytes += iov[i].iov_len;
        }
-
        stream->ostream.offset += bytes;
+
+       if (!zstream->ostream.corked) {
+               if (o_stream_zlib_send_flush(zstream) < 0)
+                       return -1;
+       }
        return bytes;
 }