mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-10 23:30:00 -04:00
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:
parent
43e11807fc
commit
4c4f5cccaa
1 changed files with 7 additions and 5 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue