]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Work around an MSVC bug
authorMichał Kępień <michal@isc.org>
Wed, 8 Apr 2020 12:27:33 +0000 (14:27 +0200)
committerMichał Kępień <michal@isc.org>
Wed, 8 Apr 2020 12:27:33 +0000 (14:27 +0200)
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.

lib/isc/log.c

index 4b7d877f3ad3c57755bbce05ce32e4afc120076e..fcf387e94e7e49335b1881540bb22885cfd25eb9 100644 (file)
@@ -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);