X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/f80621049e9b2b2070920ef364c272b6ddaec073..774ef68f00d3b83a869119720af93b6d57731041:/lib/zlib.c diff --git a/lib/zlib.c b/lib/zlib.c index 9d965137..82e82c75 100644 --- a/lib/zlib.c +++ b/lib/zlib.c @@ -3943,7 +3943,9 @@ z_stream *z; /* for zfree function */ /* build fixed tables only once--keep them here */ -local int fixed_lock = 0; +#ifdef MULTI_THREADED +local volatile int fixed_lock = 0; +#endif local int fixed_built = 0; #define FIXEDH 530 /* number of hufts used by fixed tables */ local uInt fixed_left = FIXEDH; @@ -3984,8 +3986,10 @@ inflate_huft * FAR *tl; /* literal/length tree result */ inflate_huft * FAR *td; /* distance tree result */ { /* build fixed tables if not built already--lock out other instances */ +#ifdef MULTI_THREADED while (++fixed_lock > 1) fixed_lock--; +#endif if (!fixed_built) { int k; /* temporary variable */ @@ -4018,7 +4022,9 @@ inflate_huft * FAR *td; /* distance tree result */ /* done */ fixed_built = 1; } +#ifdef MULTI_THREADED fixed_lock--; +#endif *bl = fixed_bl; *bd = fixed_bd; *tl = fixed_tl;