From bea333f7c92c3ffa1eec25e19e86d0487457365b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 16 Feb 2021 16:02:51 +0100 Subject: [PATCH] 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. --- lib/isc/hp.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/lib/isc/hp.c b/lib/isc/hp.c index 16dc05a15c..92d160b3eb 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