summaryrefslogtreecommitdiff
path: root/src/entry/rcu_hash.cpp
diff options
context:
space:
mode:
authorliuwentan <[email protected]>2023-03-09 11:26:00 +0800
committerliuwentan <[email protected]>2023-03-09 11:26:00 +0800
commitce715b44c1886c8e44f0c6fbac0bff4a80ef3f8c (patch)
treeb3f124609fdf50f17d48857c583f5a77e731762f /src/entry/rcu_hash.cpp
parent69356cd8b215e6d9a85fd923ce145ad3a3dffa8d (diff)
fix flagScan update bugv3.6.20develop-version3
Diffstat (limited to 'src/entry/rcu_hash.cpp')
-rw-r--r--src/entry/rcu_hash.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/entry/rcu_hash.cpp b/src/entry/rcu_hash.cpp
index 5062787..70712de 100644
--- a/src/entry/rcu_hash.cpp
+++ b/src/entry/rcu_hash.cpp
@@ -198,12 +198,12 @@ void rcu_hash_add(struct rcu_hash_table *htable, const char *key, size_t key_len
if (htable->effective_hash == 'a') {
HASH_FIND(hh_b, htable->hashmap_b, key, key_len, tmp);
if (NULL == tmp) {
- HASH_ADD_KEYPTR(hh_b, htable->hashmap_b, key, key_len, node);
+ HASH_ADD_KEYPTR(hh_b, htable->hashmap_b, node->key, node->key_len, node);
}
} else {
HASH_FIND(hh_a, htable->hashmap_a, key, key_len, tmp);
if (NULL == tmp) {
- HASH_ADD_KEYPTR(hh_a, htable->hashmap_a, key, key_len, node);
+ HASH_ADD_KEYPTR(hh_a, htable->hashmap_a, node->key, node->key_len, node);
}
}
}
@@ -272,6 +272,15 @@ size_t rcu_hash_count(struct rcu_hash_table *htable)
}
}
+int rcu_hash_is_updating(struct rcu_hash_table *htable)
+{
+ if (NULL == htable) {
+ return 0;
+ }
+
+ return htable->is_updating;
+}
+
void rcu_hash_commit(struct rcu_hash_table *htable)
{
if (NULL == htable) {
@@ -313,32 +322,27 @@ void rcu_hash_commit(struct rcu_hash_table *htable)
pthread_mutex_unlock(&htable->update_mutex);
}
-size_t rcu_hash_list_updating_data(struct rcu_hash_table *htable, void ***data_array)
+size_t rcu_hash_list(struct rcu_hash_table *htable, void ***data_array)
{
size_t i = 0;
size_t node_cnt = 0;
struct rcu_hash_node *node = NULL, *tmp = NULL;
if (htable->effective_hash == 'a') {
- node_cnt = HASH_CNT(hh_b, htable->hashmap_b);
+ node_cnt = HASH_CNT(hh_a, htable->hashmap_a);
*data_array = ALLOC(void *, node_cnt);
- HASH_ITER(hh_b, htable->hashmap_b, node, tmp) {
+ HASH_ITER(hh_a, htable->hashmap_a, node, tmp) {
(*data_array)[i] = node->data;
i++;
}
} else {
- node_cnt = HASH_CNT(hh_a, htable->hashmap_a);
+ node_cnt = HASH_CNT(hh_b, htable->hashmap_b);
*data_array = ALLOC(void *, node_cnt);
- HASH_ITER(hh_a, htable->hashmap_a, node, tmp) {
+ HASH_ITER(hh_b, htable->hashmap_b, node, tmp) {
(*data_array)[i] = node->data;
i++;
}
}
return node_cnt;
-}
-
-int rcu_hash_updating_flag(struct rcu_hash_table *htable)
-{
- return htable->is_updating;
} \ No newline at end of file