diff --git a/src/libraries/System.IO.Compression/src/System/IO/Compression/DeflateZLib/DeflateStream.cs b/src/libraries/System.IO.Compression/src/System/IO/Compression/DeflateZLib/DeflateStream.cs index 81445644856a94..05bab3f51302fe 100644 --- a/src/libraries/System.IO.Compression/src/System/IO/Compression/DeflateZLib/DeflateStream.cs +++ b/src/libraries/System.IO.Compression/src/System/IO/Compression/DeflateZLib/DeflateStream.cs @@ -220,21 +220,24 @@ async Task Core(CancellationToken cancellationToken) { Debug.Assert(_deflater != null && _buffer != null); - // Compress any bytes left: - await WriteDeflaterOutputAsync(cancellationToken).ConfigureAwait(false); - - // Pull out any bytes left inside deflater: - bool flushSuccessful; - do + if (_wroteBytes) { - int compressedBytes; - flushSuccessful = _deflater.Flush(_buffer, out compressedBytes); - if (flushSuccessful) + // Compress any bytes left: + await WriteDeflaterOutputAsync(cancellationToken).ConfigureAwait(false); + + // Pull out any bytes left inside deflater: + bool flushSuccessful; + do { - await _stream.WriteAsync(new ReadOnlyMemory(_buffer, 0, compressedBytes), cancellationToken).ConfigureAwait(false); - } - Debug.Assert(flushSuccessful == (compressedBytes > 0)); - } while (flushSuccessful); + int compressedBytes; + flushSuccessful = _deflater.Flush(_buffer, out compressedBytes); + if (flushSuccessful) + { + await _stream.WriteAsync(new ReadOnlyMemory(_buffer, 0, compressedBytes), cancellationToken).ConfigureAwait(false); + } + Debug.Assert(flushSuccessful == (compressedBytes > 0)); + } while (flushSuccessful); + } // Always flush on the underlying stream await _stream.FlushAsync(cancellationToken).ConfigureAwait(false);