]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Only update the global tid_count once 12188/head
authorOndřej Surý <ondrej@sury.org>
Thu, 4 Jun 2026 09:58:12 +0000 (11:58 +0200)
committerOndřej Surý <ondrej@sury.org>
Thu, 4 Jun 2026 10:50:57 +0000 (12:50 +0200)
Normally, the tid_count is initialized only once at the beginning of the
application.  The only exception is the pattern in the unit test where
isc_loopmgr is repeatedly created and torn down and each creation of
isc_loopmgr_t calls isc__tid_initcount() with the previous value.

ThreadSanitizer sees that as write operation on unprotected memory are
reports this as data race even though the value has not really changed.

This has been fixed by skipping the tid_count value update on repeated
calls.

(cherry picked from commit a570e37c067fc83e5d78698a118e8c8e45085498)

lib/isc/tid.c

index 6979f0cf662b602c8c04eb56975cf682a39df1b0..9f8f54b02e5a54b3f64c9ceef56aef0792ccf591 100644 (file)
@@ -11,7 +11,6 @@
  * information regarding copyright ownership.
  */
 
-#include <stdlib.h>
 #include <sys/types.h>
 #include <unistd.h>
 
@@ -44,7 +43,9 @@ isc__tid_init(uint32_t tid) {
 void
 isc__tid_initcount(uint32_t count) {
        REQUIRE(tid_count == 0 || tid_count == count);
-       tid_count = count;
+       if (tid_count == 0) {
+               tid_count = count;
+       }
 }
 
 /**