]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: iostream-pump - Cork the ostream when writing
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sun, 29 Oct 2017 21:28:38 +0000 (23:28 +0200)
committerTimo Sirainen <tss@dovecot.fi>
Wed, 1 Nov 2017 00:23:31 +0000 (02:23 +0200)
This reduces latency for TCP connections by disabling Nagle algorithm.

src/lib/iostream-pump.c
src/lib/test-iostream-pump.c

index 1d3901187dd6c6b5e31bcbe1ac5685caa1a2c36e..b725af958d5b333ae7a854dc4df899ad377b5cc1 100644 (file)
@@ -28,12 +28,14 @@ void iostream_pump_copy(struct iostream_pump *pump)
 {
        enum ostream_send_istream_result res;
 
+       o_stream_cork(pump->output);
        size_t old_size = o_stream_get_max_buffer_size(pump->output);
        o_stream_set_max_buffer_size(pump->output,
                                     I_MIN(IO_BLOCK_SIZE,
                                           o_stream_get_max_buffer_size(pump->output)));
        res = o_stream_send_istream(pump->output, pump->input);
        o_stream_set_max_buffer_size(pump->output, old_size);
+       o_stream_uncork(pump->output);
 
        switch(res) {
        case OSTREAM_SEND_ISTREAM_RESULT_ERROR_INPUT:
index 95135c20a4798786dfcd95a6bc46f8c18fde32c4..8650c3dd24e59e0991d32f2c00e4b2def18c9542 100644 (file)
@@ -105,6 +105,8 @@ const char *run_pump(struct istream *in, struct ostream *out, int *counter, buff
                /* input failed, finish flushing output */
                test_ostream_set_max_output_size(ctx.out, (size_t)-1);
                test_assert(o_stream_flush(ctx.out) > 0);
+       } else {
+               test_assert(o_stream_flush(ctx.out) != 0);
        }
 
        const char *ret = t_strdup(str_c(out_buffer));