}
}
-#if 0
void free_node_cb(struct rcu_head *head)
{
struct ja_test_node *node =
- caa_container_of(head, struct ja_test_node, head);
+ caa_container_of(head, struct ja_test_node, node.head);
free(node);
}
+#if 0
static
void test_delete_all_nodes(struct cds_lfht *ht)
{
printf("Test #2: successful key lookup (8-bit).\n");
for (key = 0; key < 200; key++) {
- struct cds_hlist_head *head;
+ struct cds_hlist_head head;
rcu_read_lock();
head = cds_ja_lookup(test_ja, key);
- if (!head) {
+ if (cds_hlist_empty(&head)) {
fprintf(stderr, "Error lookup node %" PRIu64 "\n", key);
assert(0);
}
printf("OK\n");
printf("Test #3: unsuccessful key lookup (8-bit).\n");
for (key = 200; key < 240; key++) {
- struct cds_hlist_head *head;
+ struct cds_hlist_head head;
rcu_read_lock();
head = cds_ja_lookup(test_ja, key);
- if (head) {
+ if (!cds_hlist_empty(&head)) {
fprintf(stderr,
"Error unexpected lookup node %" PRIu64 "\n",
key);
rcu_read_unlock();
}
printf("OK\n");
+ printf("Test #4: remove keys (8-bit).\n");
+ for (key = 0; key < 200; key++) {
+ struct cds_hlist_head head;
+ struct ja_test_node *node;
+
+ rcu_read_lock();
+ head = cds_ja_lookup(test_ja, key);
+ node = cds_hlist_first_entry_rcu(&head, struct ja_test_node, node.list);
+ if (!node) {
+ fprintf(stderr, "Error lookup node %" PRIu64 "\n", key);
+ assert(0);
+ }
+ ret = cds_ja_del(test_ja, key, &node->node);
+ if (ret) {
+ fprintf(stderr, "Error (%d) removing node %" PRIu64 "\n", ret, key);
+ assert(0);
+ }
+ call_rcu(&node->node.head, free_node_cb);
+ rcu_read_unlock();
+ }
+ printf("OK\n");
- ret = cds_ja_destroy(test_ja);
+ ret = cds_ja_destroy(test_ja, free_node_cb);
if (ret) {
fprintf(stderr, "Error destroying judy array\n");
return -1;
printf("Test #2: successful key lookup (16-bit).\n");
//for (key = 0; key < 10000; key++) {
for (key = 0; key < 65536; key+=256) {
- struct cds_hlist_head *head;
+ struct cds_hlist_head head;
rcu_read_lock();
head = cds_ja_lookup(test_ja, key);
- if (!head) {
+ if (cds_hlist_empty(&head)) {
fprintf(stderr, "Error lookup node %" PRIu64 "\n", key);
assert(0);
}
printf("OK\n");
printf("Test #3: unsuccessful key lookup (16-bit).\n");
for (key = 11000; key <= 11002; key++) {
- struct cds_hlist_head *head;
+ struct cds_hlist_head head;
rcu_read_lock();
head = cds_ja_lookup(test_ja, key);
- if (head) {
+ if (!cds_hlist_empty(&head)) {
fprintf(stderr,
"Error unexpected lookup node %" PRIu64 "\n",
key);
}
printf("OK\n");
- ret = cds_ja_destroy(test_ja);
+ ret = cds_ja_destroy(test_ja, free_node_cb);
if (ret) {
fprintf(stderr, "Error destroying judy array\n");
return -1;
printf("Test #2: successful key lookup (%u-bit).\n", bits);
zerocount = 0;
for (key = 0; key <= max_key && (key != 0 || zerocount < 1); key += 1ULL << (bits - 8)) {
- struct cds_hlist_head *head;
+ struct cds_hlist_head head;
rcu_read_lock();
head = cds_ja_lookup(test_ja, key);
- if (!head) {
+ if (cds_hlist_empty(&head)) {
fprintf(stderr, "Error lookup node %" PRIu64 "\n", key);
assert(0);
}
printf("Test #3: unsuccessful key lookup (%u-bit).\n", bits);
zerocount = 0;
for (key = 0; key <= max_key && (key != 0 || zerocount < 1); key += 1ULL << (bits - 8)) {
- struct cds_hlist_head *head;
+ struct cds_hlist_head head;
rcu_read_lock();
head = cds_ja_lookup(test_ja, key + 42);
- if (head) {
+ if (!cds_hlist_empty(&head)) {
fprintf(stderr,
"Error unexpected lookup node %" PRIu64 "\n",
key + 42);
printf("OK\n");
}
- ret = cds_ja_destroy(test_ja);
+ ret = cds_ja_destroy(test_ja, free_node_cb);
if (ret) {
fprintf(stderr, "Error destroying judy array\n");
return -1;