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.
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);