]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
istream-[b]zlib: Corking now affects also the parent stream.
authorTimo Sirainen <tss@iki.fi>
Tue, 9 Nov 2010 21:03:34 +0000 (21:03 +0000)
committerTimo Sirainen <tss@iki.fi>
Tue, 9 Nov 2010 21:03:34 +0000 (21:03 +0000)
src/plugins/zlib/ostream-bzlib.c
src/plugins/zlib/ostream-zlib.c

index ad0d41dc7b3fcf48f326c9652ea3a7692947b607..a1b73a4c611f64c4c54af6225bb0bdff21cd419d 100644 (file)
@@ -119,6 +119,19 @@ static int o_stream_bzlib_send_flush(struct bzlib_ostream *zstream)
        return 0;
 }
 
+static void o_stream_bzlib_cork(struct ostream_private *stream, bool set)
+{
+       struct bzlib_ostream *zstream = (struct bzlib_ostream *)stream;
+
+       stream->corked = set;
+       if (set)
+               o_stream_cork(zstream->output);
+       else {
+               (void)o_stream_flush(&stream->ostream);
+               o_stream_uncork(zstream->output);
+       }
+}
+
 static int o_stream_bzlib_flush(struct ostream_private *stream)
 {
        struct bzlib_ostream *zstream = (struct bzlib_ostream *)stream;
@@ -161,6 +174,7 @@ struct ostream *o_stream_create_bz2(struct ostream *output, int level)
 
        zstream = i_new(struct bzlib_ostream, 1);
        zstream->ostream.sendv = o_stream_bzlib_sendv;
+       zstream->ostream.cork = o_stream_bzlib_cork;
        zstream->ostream.flush = o_stream_bzlib_flush;
        zstream->ostream.iostream.close = o_stream_bzlib_close;
        zstream->output = output;
index 750e852d1632c2bbb283e5656855106da8718602..a3f9dc35abc32ac8b660dca519d200dfa70f4486 100644 (file)
@@ -181,6 +181,19 @@ static int o_stream_zlib_send_flush(struct zlib_ostream *zstream)
        return 0;
 }
 
+static void o_stream_zlib_cork(struct ostream_private *stream, bool set)
+{
+       struct zlib_ostream *zstream = (struct zlib_ostream *)stream;
+
+       stream->corked = set;
+       if (set)
+               o_stream_cork(zstream->output);
+       else {
+               (void)o_stream_flush(&stream->ostream);
+               o_stream_uncork(zstream->output);
+       }
+}
+
 static int o_stream_zlib_flush(struct ostream_private *stream)
 {
        struct zlib_ostream *zstream = (struct zlib_ostream *)stream;
@@ -240,6 +253,7 @@ o_stream_create_zlib(struct ostream *output, int level, bool gz)
 
        zstream = i_new(struct zlib_ostream, 1);
        zstream->ostream.sendv = o_stream_zlib_sendv;
+       zstream->ostream.cork = o_stream_zlib_cork;
        zstream->ostream.flush = o_stream_zlib_flush;
        zstream->ostream.iostream.close = o_stream_zlib_close;
        zstream->output = output;