From: Timo Sirainen Date: Fri, 27 Oct 2017 17:49:07 +0000 (+0300) Subject: lib-compression: Use i_stream_try_alloc*() X-Git-Tag: 2.3.0.rc1~639 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef4661aec4031e24944175ab914dc60942a2b68a;p=thirdparty%2Fdovecot%2Fcore.git lib-compression: Use i_stream_try_alloc*() --- diff --git a/src/lib-compression/istream-bzlib.c b/src/lib-compression/istream-bzlib.c index c73673f8e6..fd0f2ffaa5 100644 --- a/src/lib-compression/istream-bzlib.c +++ b/src/lib-compression/istream-bzlib.c @@ -78,25 +78,13 @@ static ssize_t i_stream_bzlib_read(struct istream_private *stream) } zstream->high_pos = 0; - if (stream->pos + CHUNK_SIZE > stream->buffer_size) { - /* try to keep at least CHUNK_SIZE available */ - if (!zstream->marked && stream->skip > 0) { - /* don't try to keep anything cached if we don't - have a seek mark. */ - i_stream_compress(stream); - } - if (stream->buffer_size < i_stream_get_max_buffer_size(&stream->istream)) - i_stream_grow_buffer(stream, CHUNK_SIZE); - - if (stream->pos == stream->buffer_size) { - if (stream->skip > 0) { - /* lose our buffer cache */ - i_stream_compress(stream); - } - - if (stream->pos == stream->buffer_size) - return -2; /* buffer full */ - } + if (!zstream->marked) { + if (!i_stream_try_alloc(stream, CHUNK_SIZE, &out_size)) + return -2; /* buffer full */ + } else { + /* try to avoid compressing, so we can quickly seek backwards */ + if (!i_stream_try_alloc_avoid_compress(stream, CHUNK_SIZE, &out_size)) + return -2; /* buffer full */ } if (i_stream_read_more(stream->parent, &data, &size) < 0) { @@ -119,7 +107,6 @@ static ssize_t i_stream_bzlib_read(struct istream_private *stream) zstream->zs.next_in = (char *)data; zstream->zs.avail_in = size; - out_size = stream->buffer_size - stream->pos; zstream->zs.next_out = (char *)stream->w_buffer + stream->pos; zstream->zs.avail_out = out_size; ret = BZ2_bzDecompress(&zstream->zs); diff --git a/src/lib-compression/istream-lzma.c b/src/lib-compression/istream-lzma.c index 430e6d1b36..9231c73c5b 100644 --- a/src/lib-compression/istream-lzma.c +++ b/src/lib-compression/istream-lzma.c @@ -87,25 +87,13 @@ static ssize_t i_stream_lzma_read(struct istream_private *stream) } zstream->high_pos = 0; - if (stream->pos + CHUNK_SIZE > stream->buffer_size) { - /* try to keep at least CHUNK_SIZE available */ - if (!zstream->marked && stream->skip > 0) { - /* don't try to keep anything cached if we don't - have a seek mark. */ - i_stream_compress(stream); - } - if (stream->buffer_size < i_stream_get_max_buffer_size(&stream->istream)) - i_stream_grow_buffer(stream, CHUNK_SIZE); - - if (stream->pos == stream->buffer_size) { - if (stream->skip > 0) { - /* lose our buffer cache */ - i_stream_compress(stream); - } - - if (stream->pos == stream->buffer_size) - return -2; /* buffer full */ - } + if (!zstream->marked) { + if (!i_stream_try_alloc(stream, CHUNK_SIZE, &out_size)) + return -2; /* buffer full */ + } else { + /* try to avoid compressing, so we can quickly seek backwards */ + if (!i_stream_try_alloc_avoid_compress(stream, CHUNK_SIZE, &out_size)) + return -2; /* buffer full */ } if (i_stream_read_more(stream->parent, &data, &size) < 0) { @@ -128,7 +116,6 @@ static ssize_t i_stream_lzma_read(struct istream_private *stream) zstream->strm.next_in = data; zstream->strm.avail_in = size; - out_size = stream->buffer_size - stream->pos; zstream->strm.next_out = stream->w_buffer + stream->pos; zstream->strm.avail_out = out_size; ret = lzma_code(&zstream->strm, LZMA_RUN); diff --git a/src/lib-compression/istream-zlib.c b/src/lib-compression/istream-zlib.c index 5f68d75d27..51bbde12ce 100644 --- a/src/lib-compression/istream-zlib.c +++ b/src/lib-compression/istream-zlib.c @@ -241,25 +241,13 @@ static ssize_t i_stream_zlib_read(struct istream_private *stream) } zstream->high_pos = 0; - if (stream->pos + CHUNK_SIZE > stream->buffer_size) { - /* try to keep at least CHUNK_SIZE available */ - if (!zstream->marked && stream->skip > 0) { - /* don't try to keep anything cached if we don't - have a seek mark. */ - i_stream_compress(stream); - } - if (stream->buffer_size < i_stream_get_max_buffer_size(&stream->istream)) - i_stream_grow_buffer(stream, CHUNK_SIZE); - - if (stream->pos == stream->buffer_size) { - if (stream->skip > 0) { - /* lose our buffer cache */ - i_stream_compress(stream); - } - - if (stream->pos == stream->buffer_size) - return -2; /* buffer full */ - } + if (!zstream->marked) { + if (!i_stream_try_alloc(stream, CHUNK_SIZE, &out_size)) + return -2; /* buffer full */ + } else { + /* try to avoid compressing, so we can quickly seek backwards */ + if (!i_stream_try_alloc_avoid_compress(stream, CHUNK_SIZE, &out_size)) + return -2; /* buffer full */ } if (i_stream_read_more(stream->parent, &data, &size) < 0) { @@ -282,7 +270,6 @@ static ssize_t i_stream_zlib_read(struct istream_private *stream) zstream->zs.next_in = (void *)data; zstream->zs.avail_in = size; - out_size = stream->buffer_size - stream->pos; zstream->zs.next_out = stream->w_buffer + stream->pos; zstream->zs.avail_out = out_size; ret = inflate(&zstream->zs, Z_SYNC_FLUSH);