From: Lai Jiangshan Date: Fri, 2 Dec 2011 13:08:14 +0000 (-0500) Subject: cleanup duplicated code X-Git-Tag: v0.7.0~43^2~26 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=1228af1ceae83f0886de7fb593b8e57e1a74e1db;p=urcu.git cleanup duplicated code Signed-off-by: Lai Jiangshan Signed-off-by: Mathieu Desnoyers --- diff --git a/rculfhash-internal.h b/rculfhash-internal.h index 38a0317..a8a1ce4 100644 --- a/rculfhash-internal.h +++ b/rculfhash-internal.h @@ -152,4 +152,26 @@ extern int get_count_order_ulong(unsigned long x); #define poison_free(ptr) free(ptr) #endif +static inline +struct cds_lfht *__default_alloc_cds_lfht( + const struct cds_lfht_mm_type *mm, + unsigned long cds_lfht_size, + unsigned long min_nr_alloc_buckets, + unsigned long max_nr_buckets) +{ + struct cds_lfht *ht; + + ht = calloc(1, cds_lfht_size); + assert(ht); + + ht->mm = mm; + ht->bucket_at = mm->bucket_at; + ht->min_nr_alloc_buckets = min_nr_alloc_buckets; + ht->min_alloc_buckets_order = + get_count_order_ulong(min_nr_alloc_buckets); + ht->max_nr_buckets = max_nr_buckets; + + return ht; +} + #endif /* _URCU_RCULFHASH_INTERNAL_H */ diff --git a/rculfhash-mm-chunk.c b/rculfhash-mm-chunk.c index 38dde3a..a7a9b76 100644 --- a/rculfhash-mm-chunk.c +++ b/rculfhash-mm-chunk.c @@ -75,26 +75,18 @@ static struct cds_lfht *alloc_cds_lfht(unsigned long min_nr_alloc_buckets, unsigned long max_nr_buckets) { - struct cds_lfht *ht; unsigned long nr_chunks, cds_lfht_size; min_nr_alloc_buckets = max(min_nr_alloc_buckets, max_nr_buckets / MAX_CHUNK_TABLE); nr_chunks = max_nr_buckets / min_nr_alloc_buckets; cds_lfht_size = offsetof(struct cds_lfht, tbl_chunk) + - sizeof(ht->tbl_chunk[0]) * nr_chunks; + sizeof(struct cds_lfht_node *) * nr_chunks; cds_lfht_size = max(cds_lfht_size, sizeof(struct cds_lfht)); - ht = calloc(1, cds_lfht_size); - assert(ht); - ht->bucket_at = bucket_at; - ht->mm = &cds_lfht_mm_chunk; - ht->min_nr_alloc_buckets = min_nr_alloc_buckets; - ht->min_alloc_buckets_order = - get_count_order_ulong(min_nr_alloc_buckets); - ht->max_nr_buckets = max_nr_buckets; - - return ht; + return __default_alloc_cds_lfht( + &cds_lfht_mm_chunk, cds_lfht_size, + min_nr_alloc_buckets, max_nr_buckets); } const struct cds_lfht_mm_type cds_lfht_mm_chunk = { diff --git a/rculfhash-mm-mmap.c b/rculfhash-mm-mmap.c index dba4524..4554ed6 100644 --- a/rculfhash-mm-mmap.c +++ b/rculfhash-mm-mmap.c @@ -131,9 +131,9 @@ static struct cds_lfht *alloc_cds_lfht(unsigned long min_nr_alloc_buckets, unsigned long max_nr_buckets) { - struct cds_lfht *ht; - unsigned long page_bucket_size = getpagesize() / sizeof(*ht->tbl_mmap); + unsigned long page_bucket_size; + page_bucket_size = getpagesize() / sizeof(struct cds_lfht_node); if (max_nr_buckets <= page_bucket_size) { /* small table */ min_nr_alloc_buckets = max_nr_buckets; @@ -143,18 +143,9 @@ struct cds_lfht *alloc_cds_lfht(unsigned long min_nr_alloc_buckets, page_bucket_size); } - ht = calloc(1, sizeof(struct cds_lfht)); - assert(ht); - - ht->bucket_at = bucket_at; - ht->mm = &cds_lfht_mm_mmap; - ht->min_nr_alloc_buckets = min_nr_alloc_buckets; - ht->min_alloc_buckets_order = - get_count_order_ulong(min_nr_alloc_buckets); - ht->max_nr_buckets = max_nr_buckets; - - - return ht; + return __default_alloc_cds_lfht( + &cds_lfht_mm_mmap, sizeof(struct cds_lfht), + min_nr_alloc_buckets, max_nr_buckets); } const struct cds_lfht_mm_type cds_lfht_mm_mmap = { diff --git a/rculfhash-mm-order.c b/rculfhash-mm-order.c index 9c0c70e..237d4cf 100644 --- a/rculfhash-mm-order.c +++ b/rculfhash-mm-order.c @@ -77,19 +77,9 @@ static struct cds_lfht *alloc_cds_lfht(unsigned long min_nr_alloc_buckets, unsigned long max_nr_buckets) { - struct cds_lfht *ht; - - ht = calloc(1, sizeof(struct cds_lfht)); - assert(ht); - - ht->bucket_at = bucket_at; - ht->mm = &cds_lfht_mm_order; - ht->min_nr_alloc_buckets = min_nr_alloc_buckets; - ht->min_alloc_buckets_order = - get_count_order_ulong(min_nr_alloc_buckets); - ht->max_nr_buckets = max_nr_buckets; - - return ht; + return __default_alloc_cds_lfht( + &cds_lfht_mm_order, sizeof(struct cds_lfht), + min_nr_alloc_buckets, max_nr_buckets); } const struct cds_lfht_mm_type cds_lfht_mm_order = {