Merge branch 'master' into urcu/ht-shrink
[urcu.git] / tests / test_urcu_hash.c
index 600b1f973f6ec997f4cd51a90771b7e36dda9077..c796b6faa7741ca7697ca0cb73f737dc7a8e1e64 100644 (file)
@@ -523,7 +523,7 @@ void *thr_writer(void *_count)
                                ret_node = cds_lfht_add_unique(test_ht, node);
                        } else {
                                if (add_replace)
-                                       ret_node = cds_lfht_replace(test_ht, node);
+                                       ret_node = cds_lfht_add_replace(test_ht, node);
                                else
                                        cds_lfht_add(test_ht, node);
                        }
@@ -545,13 +545,10 @@ void *thr_writer(void *_count)
                        cds_lfht_lookup(test_ht,
                                (void *)(((unsigned long) rand_r(&rand_lookup) % write_pool_size) + write_pool_offset),
                                sizeof(void *), &iter);
-                       node = cds_lfht_iter_get_node(&iter);
-                       if (node)
-                               ret = cds_lfht_del(test_ht, node);
-                       else
-                               ret = -ENOENT;
+                       ret = cds_lfht_del(test_ht, &iter);
                        rcu_read_unlock();
                        if (ret == 0) {
+                               node = cds_lfht_iter_get_node(&iter);
                                call_rcu(&node->head, free_node_cb);
                                nr_del++;
                        } else
@@ -615,7 +612,7 @@ static int populate_hash(void)
                        ret_node = cds_lfht_add_unique(test_ht, node);
                } else {
                        if (add_replace)
-                               ret_node = cds_lfht_replace(test_ht, node);
+                               ret_node = cds_lfht_add_replace(test_ht, node);
                        else
                                cds_lfht_add(test_ht, node);
                }
@@ -872,7 +869,8 @@ int main(int argc, char **argv)
                        opt_auto_resize ? CDS_LFHT_AUTO_RESIZE : 0, NULL);
        ret = populate_hash();
        assert(!ret);
-       rcu_unregister_thread();
+
+       rcu_thread_offline();
 
        next_aff = 0;
 
@@ -934,8 +932,12 @@ int main(int argc, char **argv)
 
        printf("Counting nodes... ");
        fflush(stdout);
+       rcu_thread_online();
+       rcu_read_lock();
        cds_lfht_count_nodes(test_ht, &approx_before, &count, &removed,
                &approx_after);
+       rcu_read_unlock();
+       rcu_thread_offline();
        printf("done.\n");
        if (count || removed) {
                printf("Approximation before node accounting: %ld nodes.\n",
@@ -947,7 +949,6 @@ int main(int argc, char **argv)
                        approx_after);
        }
        ret = cds_lfht_destroy(test_ht, NULL);
-
        if (ret)
                printf_verbose("final delete aborted\n");
        else
@@ -962,6 +963,7 @@ int main(int argc, char **argv)
                nr_writers, wdelay, tot_reads, tot_writes,
                tot_reads + tot_writes, tot_add, tot_add_exist, tot_remove,
                (long long) tot_add + init_populate - tot_remove - count);
+       rcu_unregister_thread();
        free_all_cpu_call_rcu_data();
        free(tid_reader);
        free(tid_writer);
This page took 0.024095 seconds and 4 git commands to generate.