rbtree test: improvement
[userspace-rcu.git] / tests / test_urcu_rbtree.c
index 043ec7121f12bb1edbe834d864d700a667a5af78..405c0dad360cf667cc26c6ebbc4843010836fa8c 100644 (file)
@@ -41,6 +41,9 @@
 /* hardcoded number of CPUs */
 #define NR_CPUS 16384
 
+/* number of insert/delete */
+#define NR_RAND 3
+
 #if defined(_syscall0)
 _syscall0(pid_t, gettid)
 #elif defined(__NR_gettid)
@@ -245,6 +248,8 @@ void *thr_writer(void *_count)
 {
        unsigned long long *count = _count;
        struct rcu_rbtree_node *node;
+       void *key[NR_RAND];
+       int i;
 
        printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
                        "writer", pthread_self(), (unsigned long)gettid());
@@ -259,14 +264,28 @@ void *thr_writer(void *_count)
        smp_mb();
 
        for (;;) {
-               node = rbtree_alloc();
                rcu_copy_mutex_lock();
-               node->key = (void *)(unsigned long)(rand() % 2048);
-               rcu_rbtree_insert(&rbtree_root, node, tree_comp, rbtree_alloc,
-                                 rbtree_free);
+
+               for (i = 0; i < NR_RAND; i++) {
+                       node = rbtree_alloc();
+                       key[i] = (void *)(unsigned long)(rand() % 2048);
+                       node->key = key[i];
+                       rcu_rbtree_insert(&rbtree_root, node, tree_comp,
+                                         rbtree_alloc, rbtree_free);
+               }
+
                if (unlikely(wduration))
                        loop_sleep(wduration);
 
+               for (i = 0; i < NR_RAND; i++) {
+                       node = rcu_rbtree_search(rbtree_root, key[i],
+                                                tree_comp);
+                       assert(node != &rcu_rbtree_nil);
+                       rcu_rbtree_remove(&rbtree_root, node, tree_comp,
+                                         rbtree_alloc, rbtree_free);
+                       defer_rcu((void (*)(void *))rbtree_free, node);
+               }
+
                rcu_copy_mutex_unlock();
                nr_writes++;
                if (unlikely(!test_duration_write()))
This page took 0.024715 seconds and 4 git commands to generate.