ludic/changes/inflate-context.md
Orkuncakilkaya 7444638030 inflate: its context in a caller-owned record, allocation-free per block; the state-backed calls kept
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>
2026-09-29 17:25:16 +03:00

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.