From: Michał Kępień Date: Wed, 8 Apr 2020 12:27:33 +0000 (+0200) Subject: Work around an MSVC bug X-Git-Tag: v9.17.1~6^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4c4f5cccaa0082317b9dda16db1e84222f5f24eb;p=thirdparty%2Fbind9.git Work around an MSVC bug The assembly code generated by MSVC for at least some signed comparisons involving atomic variables incorrectly uses unsigned conditional jumps instead of signed ones. In particular, the checks in isc_log_wouldlog() are affected in a way which breaks logging on Windows and thus also all system tests involving a named instance. Work around the issue by assigning the values returned by atomic_load_acquire() calls in isc_log_wouldlog() to local variables before performing comparisons. --- diff --git a/lib/isc/log.c b/lib/isc/log.c index 4b7d877f3ad..fcf387e94e7 100644 --- a/lib/isc/log.c +++ b/lib/isc/log.c @@ -1454,13 +1454,15 @@ isc_log_wouldlog(isc_log_t *lctx, int level) { return (false); } - if (level <= atomic_load_acquire(&lctx->highest_level)) { + int highest_level = atomic_load_acquire(&lctx->highest_level); + if (level <= highest_level) { return (true); } - if (atomic_load_acquire(&lctx->dynamic) && - level <= atomic_load_acquire(&lctx->debug_level)) - { - return (true); + if (atomic_load_acquire(&lctx->dynamic)) { + int debug_level = atomic_load_acquire(&lctx->debug_level); + if (level <= debug_level) { + return (true); + } } return (false);