rculfhash test: Use get first/get next to delete all entries
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 28 Sep 2011 03:27:17 +0000 (23:27 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 28 Sep 2011 03:27:17 +0000 (23:27 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
tests/test_urcu_hash.c

index d6464b4b1c23dfb9714acd2053f1e29eb1099bee..98227c219abf11e9ea7aa667ecad4e98e65f8278 100644 (file)
@@ -633,6 +633,26 @@ static int populate_hash(void)
        return 0;
 }
 
+static
+void test_delete_all_nodes(struct cds_lfht *ht)
+{
+       struct cds_lfht_iter iter;
+       struct cds_lfht_node *node;
+       unsigned long count = 0;
+
+       cds_lfht_first(ht, &iter);
+       while ((node = cds_lfht_iter_get_node(&iter)) != NULL) {
+               int ret;
+
+               ret = cds_lfht_del(test_ht, &iter);
+               assert(!ret);
+               call_rcu(&node->head, free_node_cb);
+               cds_lfht_next(ht, &iter);
+               count++;
+       }
+       printf("deleted %lu nodes.\n", count);
+}
+
 void show_usage(int argc, char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s)\n", argv[0]);
@@ -930,19 +950,20 @@ int main(int argc, char **argv)
        if (err != 0)
                exit(1);
 
-       printf("Counting nodes... ");
        fflush(stdout);
        rcu_thread_online();
        rcu_read_lock();
+       printf("Counting nodes... ");
        cds_lfht_count_nodes(test_ht, &approx_before, &count, &removed,
                &approx_after);
+       printf("done.\n");
+       test_delete_all_nodes(test_ht);
        rcu_read_unlock();
        rcu_thread_offline();
-       printf("done.\n");
        if (count || removed) {
                printf("Approximation before node accounting: %ld nodes.\n",
                        approx_before);
-               printf("WARNING: nodes left in the hash table upon destroy: "
+               printf("Nodes deleted from hash table before destroy: "
                        "%lu nodes + %lu logically removed.\n",
                        count, removed);
                printf("Approximation after node accounting: %ld nodes.\n",
This page took 0.025775 seconds and 4 git commands to generate.