From mboxrd@z Thu Jan 1 00:00:00 1970 From: laijs@cn.fujitsu.com (Lai Jiangshan) Date: Wed, 2 Nov 2011 15:50:47 +0800 Subject: [ltt-dev] [PATCH 4/7] rculfhash: Comparision API use node pointer instead of key In-Reply-To: References: Message-ID: <43b75b76b9d059af1538d2fcbf96754aa6420f0b.1320217693.git.laijs@cn.fujitsu.com> Prepare for future work for moving key out of struct cds_lfht_node. Signed-off-by: Lai Jiangshan --- rculfhash.c | 2 +- tests/test_urcu_hash.c | 12 +++++++++--- urcu/rculfhash.h | 4 ++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/rculfhash.c b/rculfhash.c index 29054cd..9745129 100644 --- a/rculfhash.c +++ b/rculfhash.c @@ -1457,7 +1457,7 @@ void cds_lfht_next_duplicate(struct cds_lfht *ht, struct cds_lfht_iter *iter) next = rcu_dereference(node->p.next); if (caa_likely(!is_removed(next)) && !is_dummy(next) - && caa_likely(!ht->compare_fct(node->key, node->key_len, key, key_len))) { + && caa_likely(!ht->compare_fct(node, iter->node))) { break; } node = clear_flag(next); diff --git a/tests/test_urcu_hash.c b/tests/test_urcu_hash.c index 4c45573..9689878 100644 --- a/tests/test_urcu_hash.c +++ b/tests/test_urcu_hash.c @@ -409,8 +409,8 @@ unsigned long test_hash(void *_key, size_t length, unsigned long seed) #endif static -unsigned long test_compare(void *key1, size_t key1_len, - void *key2, size_t key2_len) +int __test_compare(void *key1, size_t key1_len, + void *key2, size_t key2_len) { if (caa_unlikely(key1_len != key2_len)) return -1; @@ -422,9 +422,15 @@ unsigned long test_compare(void *key1, size_t key1_len, } static +int test_compare(struct cds_lfht_node *a, struct cds_lfht_node *b) +{ + return __test_compare(a->key, a->key_len, b->key, b->key_len); +} + +static int test_match(struct cds_lfht_node *node, void *arg) { - return !test_compare(node->key, node->key_len, + return !__test_compare(node->key, node->key_len, arg, sizeof(unsigned long)); } diff --git a/urcu/rculfhash.h b/urcu/rculfhash.h index b56fe56..c6946dc 100644 --- a/urcu/rculfhash.h +++ b/urcu/rculfhash.h @@ -84,8 +84,8 @@ struct cds_lfht; typedef unsigned long (*cds_lfht_hash_fct)(void *key, size_t length, unsigned long seed); -typedef unsigned long (*cds_lfht_compare_fct)(void *key1, size_t key1_len, - void *key2, size_t key2_len); +typedef int (*cds_lfht_compare_fct)(struct cds_lfht_node *a, + struct cds_lfht_node *b); typedef int (*cds_lfht_lookup_fct)(struct cds_lfht_node *node, void *arg); /* -- 1.7.4.4