From c267ef7306fe9fc1399833e3556cd9798dec2eb0 Mon Sep 17 00:00:00 2001 From: Mark Adler Date: Mon, 5 Jan 2026 01:15:38 -0600 Subject: Use atomics to build inflate fixed tables once. This moves the once code from crc32.c to zutil.c, and uses it also for building the inflate fixed tables when BUILDFIXED is defined. The fixed tables are now housed in inftrees.c, shared by inflate.c and infback.c. The once() function is now external, and so is renamed to z_once() to avoid name collisions. If either BUILDFIXED or DYNAMIC_CRC_TABLE is defined, and atomics are not available, then a warning is issued noting that zlib is not thread-safe. --- FAQ | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'FAQ') diff --git a/FAQ b/FAQ index b6b11bd..57dd4f5 100644 --- a/FAQ +++ b/FAQ @@ -156,6 +156,10 @@ The latest zlib FAQ is at http://zlib.net/zlib_faq.html library memory allocation routines by default. zlib's *Init* functions allow for the application to provide custom memory allocation routines. + If the non-default BUILDFIXED or DYNAMIC_CRC_TABLE defines are used on a + system without atomics (e.g. pre-C11), then inflate() and crc32() will not + be thread safe. + Of course, you should only operate on any given zlib or gzip stream from a single thread at a time. -- cgit v1.2.3-55-g6feb