Browse Source

Try fix issue with undisposed buffers

pull/3096/head
Brian Popow 2 months ago
parent
commit
9e80da9117
  1. 9
      src/ImageSharp/Formats/Exr/Compression/Compressors/ZipExrCompressor.cs
  2. 2
      src/ImageSharp/Formats/Exr/Compression/Decompressors/ZipExrCompression.cs

9
src/ImageSharp/Formats/Exr/Compression/Compressors/ZipExrCompressor.cs

@ -11,7 +11,7 @@ internal class ZipExrCompressor : ExrBaseCompressor
{ {
private readonly DeflateCompressionLevel compressionLevel; private readonly DeflateCompressionLevel compressionLevel;
private MemoryStream memoryStream = new(); private readonly MemoryStream memoryStream = new();
private readonly System.Buffers.IMemoryOwner<byte> buffer; private readonly System.Buffers.IMemoryOwner<byte> buffer;
@ -60,12 +60,17 @@ internal class ZipExrCompressor : ExrBaseCompressor
byte[] buffer = this.memoryStream.GetBuffer(); byte[] buffer = this.memoryStream.GetBuffer();
this.Output.Write(buffer, 0, size); this.Output.Write(buffer, 0, size);
this.memoryStream = new(); // Reset memory stream for next pixel row.
this.memoryStream.Seek(0, SeekOrigin.Begin);
this.memoryStream.SetLength(0);
return (uint)size; return (uint)size;
} }
/// <inheritdoc/> /// <inheritdoc/>
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
{ {
this.buffer.Dispose();
this.memoryStream?.Dispose();
} }
} }

2
src/ImageSharp/Formats/Exr/Compression/Decompressors/ZipExrCompression.cs

@ -30,7 +30,7 @@ internal class ZipExrCompression : ExrBaseDecompressor
return left > 0 ? left : 0; return left > 0 ? left : 0;
}); });
inflateStream.AllocateNewBytes((int)this.BytesPerBlock, true); inflateStream.AllocateNewBytes((int)this.BytesPerBlock, true);
DeflateStream dataStream = inflateStream.CompressedStream!; using DeflateStream dataStream = inflateStream.CompressedStream!;
int totalRead = 0; int totalRead = 0;
while (totalRead < buffer.Length) while (totalRead < buffer.Length)

Loading…
Cancel
Save