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.
This commit is contained in:
Michał Kępień 2020-04-08 14:27:33 +02:00
parent 43e11807fc
commit 4c4f5cccaa

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