From: Ondřej Surý Date: Tue, 16 Feb 2021 15:02:51 +0000 (+0100) Subject: Use globally assigned thread_id in the isc_hp API X-Git-Tag: v9.17.11~23^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bea333f7c92c3ffa1eec25e19e86d0487457365b;p=thirdparty%2Fbind9.git Use globally assigned thread_id in the isc_hp API 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. --- diff --git a/lib/isc/hp.c b/lib/isc/hp.c index 16dc05a15c7..92d160b3ebd 100644 --- a/lib/isc/hp.c +++ b/lib/isc/hp.c @@ -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