X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=tests%2Ftest_urcu_rbtree.c;h=405c0dad360cf667cc26c6ebbc4843010836fa8c;hb=40f1014da7f4aab3412494ebcd3ffcf89546ab91;hp=043ec7121f12bb1edbe834d864d700a667a5af78;hpb=472d3f7cc1d5b0eae0a710a66a4a646e94ce306a;p=userspace-rcu.git diff --git a/tests/test_urcu_rbtree.c b/tests/test_urcu_rbtree.c index 043ec71..405c0da 100644 --- a/tests/test_urcu_rbtree.c +++ b/tests/test_urcu_rbtree.c @@ -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()))