]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Use globally assigned thread_id in the isc_hp API
authorOndřej Surý <ondrej@sury.org>
Tue, 16 Feb 2021 15:02:51 +0000 (16:02 +0100)
committerOndřej Surý <ondrej@sury.org>
Thu, 25 Feb 2021 15:21:10 +0000 (16:21 +0100)
Convert the isc_hp API to use the globally available isc_tid_v instead
of locally defined tid_v.  This should solve most of the problems on
machines with many number of cores / CPUs.

lib/isc/hp.c

index 16dc05a15c705cfdf07a01e05a5c8409c72d470b..92d160b3ebda9083dcf31bfae9679133a63fe457 100644 (file)
@@ -62,12 +62,6 @@ static int isc__hp_max_threads = HP_MAX_THREADS;
 /* Maximum number of retired objects per thread */
 static int isc__hp_max_retired = HP_MAX_THREADS * HP_MAX_HPS;
 
-#define TID_UNKNOWN -1
-
-static atomic_int_fast32_t tid_v_base = ATOMIC_VAR_INIT(0);
-
-static thread_local int tid_v = TID_UNKNOWN;
-
 typedef struct retirelist {
        int size;
        uintptr_t *list;
@@ -83,12 +77,7 @@ struct isc_hp {
 
 static inline int
 tid(void) {
-       if (tid_v == TID_UNKNOWN) {
-               tid_v = atomic_fetch_add(&tid_v_base, 1);
-               REQUIRE(tid_v < isc__hp_max_threads);
-       }
-
-       return (tid_v);
+       return (isc_tid_v);
 }
 
 void