ZInflate (z_inflate_new) holds the bit reader, the RFC tables and every table and scratch list a block builds, rebuilt in place: an inflate allocates nothing, and a worker thread inflates in a context of its own (made on the program's thread). z_inflate_in / z_uncompress_in / z_gunzip_in take it; z_inflate / z_uncompress / z_gunzip and every caller (image, atlas, tiled, render3d's png_decode) are unchanged and work in RtInflateState's one context. The old per-call lit/dist tables were also leaked on an error return; there are none now. Compiles: Maroon Lake headless, examples/library/tiled_p2 and tiled_p6. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
616 B
616 B
bump: minor
type: feature
Inflate in a caller-owned context. ZInflate holds everything one inflate works in - the bit reader,
the RFC's length and distance tables, and every Huffman table and scratch list a block builds - made once
by z_inflate_new() and rebuilt in place, so an inflate allocates nothing and each thread that inflates
holds a context of its own. z_inflate_in(z, src, len, out, cap), z_uncompress_in (zlib) and
z_gunzip_in (gzip) take the context; z_inflate / z_uncompress / z_gunzip keep their signatures,
working in the one context RtInflateState holds, so no caller changes.