rculfhash: put thread offline before taking mutex (fix G.P. deadlock)
[urcu.git] / tests / test_urcu_hash.c
index 3a87d483f9a15ad981b0af52e0198a70ea55db1c..d7c2fc2da4098ea37de585590564e403032fadbe 100644 (file)
 /* hardcoded number of CPUs */
 #define NR_CPUS 16384
 
+#ifdef POISON_FREE
+#define poison_free(ptr)                               \
+       do {                                            \
+               memset(ptr, 0x42, sizeof(*(ptr)));      \
+               free(ptr);                              \
+       } while (0)
+#else
+#define poison_free(ptr)       free(ptr)
+#endif
+
+
+
 #if defined(_syscall0)
 _syscall0(pid_t, gettid)
 #elif defined(__NR_gettid)
@@ -704,7 +716,9 @@ int main(int argc, char **argv)
        test_ht = cds_lfht_new(test_hash, test_compare, 0x42UL,
                        init_hash_size,
                        opt_auto_resize ? CDS_LFHT_AUTO_RESIZE : 0,
-                       call_rcu, synchronize_rcu);
+                       call_rcu, synchronize_rcu, rcu_read_lock,
+                       rcu_read_unlock, rcu_thread_offline,
+                       rcu_thread_online);
        ret = populate_hash();
        assert(!ret);
         err = create_all_cpu_call_rcu_data(0);
@@ -774,6 +788,7 @@ int main(int argc, char **argv)
                nr_writers, wdelay, rand_pool, tot_reads, tot_writes,
                tot_reads + tot_writes, tot_add, tot_add_exist, tot_remove,
                (long long) tot_add + init_populate - tot_remove - count);
+       free_all_cpu_call_rcu_data();
        free(tid_reader);
        free(tid_writer);
        free(count_reader);
This page took 0.02282 seconds and 4 git commands to generate.