void free_node_cb(struct rcu_head *head)
{
struct ja_test_node *node =
- caa_container_of(head, struct ja_test_node, node.head);
+ caa_container_of(head, struct ja_test_node, head);
free_node(node);
}
+static
+void rcu_free_test_node(struct ja_test_node *test_node)
+{
+ call_rcu(&test_node->head, free_node_cb);
+}
+
+static
+void rcu_free_node(struct cds_ja_node *node)
+{
+ struct ja_test_node *test_node = to_test_node(node);
+
+ rcu_free_test_node(test_node);
+}
+
#if 0
static
void test_delete_all_nodes(struct cds_lfht *ht)
fprintf(stderr, "Error (%d) removing node %" PRIu64 "\n", ret, key);
assert(0);
}
- call_rcu(&node->node.head, free_node_cb);
+ rcu_free_test_node(node);
head = cds_ja_lookup(test_ja, key);
if (!cds_hlist_empty(&head)) {
fprintf(stderr, "Error lookup %" PRIu64 ": %p (after delete) failed. Node is not expected.\n", key, head.next);
printf("OK\n");
- ret = cds_ja_destroy(test_ja, free_node_cb);
+ ret = cds_ja_destroy(test_ja, rcu_free_node);
if (ret) {
fprintf(stderr, "Error destroying judy array\n");
return -1;
fprintf(stderr, "Error (%d) removing node %" PRIu64 "\n", ret, key);
assert(0);
}
- call_rcu(&node->node.head, free_node_cb);
+ rcu_free_test_node(node);
head = cds_ja_lookup(test_ja, key);
if (!cds_hlist_empty(&head)) {
fprintf(stderr, "Error lookup %" PRIu64 ": %p (after delete) failed. Node is not expected.\n", key, head.next);
printf("OK\n");
- ret = cds_ja_destroy(test_ja, free_node_cb);
+ ret = cds_ja_destroy(test_ja, rcu_free_node);
if (ret) {
fprintf(stderr, "Error destroying judy array\n");
return -1;
fprintf(stderr, "Error (%d) removing node %" PRIu64 "\n", ret, key);
assert(0);
}
- call_rcu(&node->node.head, free_node_cb);
+ rcu_free_test_node(node);
testhead = cds_ja_lookup(test_ja, key);
if (count < nr_dup && cds_hlist_empty(&testhead)) {
fprintf(stderr, "Error: no node found after deletion of some nodes of a key\n");
}
printf("OK\n");
- ret = cds_ja_destroy(test_ja, free_node_cb);
+ ret = cds_ja_destroy(test_ja, rcu_free_node);
if (ret) {
fprintf(stderr, "Error destroying judy array\n");
return -1;
if (node) {
ret = cds_ja_del(test_ja, key, &node->node);
if (!ret) {
- call_rcu(&node->node.head, free_node_cb);
+ rcu_free_test_node(node);
URCU_TLS(nr_del)++;
} else {
URCU_TLS(nr_delnoent)++;
}
rcu_thread_online_qsbr();
- ret = cds_ja_destroy(test_ja, free_node_cb);
+ ret = cds_ja_destroy(test_ja, rcu_free_node);
if (ret) {
fprintf(stderr, "Error destroying judy array\n");
goto end;