X-Git-Url: https://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=rculfhash.c;h=638432a90b3121ef3c4b1a9d870680e1f6ba98f9;hp=c7a429e6902fa521ff0d72d2d62e6f194878ad66;hb=91452a6aeb429d72aafaed0fd176cac5e742251d;hpb=4e9b9fbf56ad649395778b7385baaa44d8db032c diff --git a/rculfhash.c b/rculfhash.c index c7a429e..638432a 100644 --- a/rculfhash.c +++ b/rculfhash.c @@ -139,7 +139,7 @@ #include #include -#include +#include "config.h" #include #include #include @@ -608,7 +608,7 @@ void ht_count_del(struct cds_lfht *ht, unsigned long size) #else /* #if defined(HAVE_SCHED_GETCPU) && defined(HAVE_SYSCONF) */ -static const long nr_cpus_mask = -1; +static const long nr_cpus_mask = -2; static struct ht_items_count *alloc_per_cpu_items_count(void) @@ -1041,8 +1041,12 @@ void partition_resize_helper(struct cds_lfht *ht, unsigned long i, * We spawn just the number of threads we need to satisfy the minimum * partition size, up to the number of CPUs in the system. */ - nr_threads = min(nr_cpus_mask + 1, - len >> MIN_PARTITION_PER_THREAD_ORDER); + if (nr_cpus_mask > 0) { + nr_threads = min(nr_cpus_mask + 1, + len >> MIN_PARTITION_PER_THREAD_ORDER); + } else { + nr_threads = 1; + } partition_len = len >> get_count_order_ulong(nr_threads); work = calloc(nr_threads, sizeof(*work)); thread_id = calloc(nr_threads, sizeof(*thread_id));