From b5194f3d76009ce7837b32afc4c24afb60f96646 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 8 Mar 2010 22:39:45 -0500 Subject: [PATCH] Improve rbtree test Signed-off-by: Mathieu Desnoyers --- tests/test_urcu_rbtree.c | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/tests/test_urcu_rbtree.c b/tests/test_urcu_rbtree.c index bc7a52d..1bccc0e 100644 --- a/tests/test_urcu_rbtree.c +++ b/tests/test_urcu_rbtree.c @@ -245,7 +245,7 @@ void *thr_writer(void *_count) { unsigned long long *count = _count; struct rcu_rbtree_node *node; - void *key; + void *key[3]; printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n", "writer", pthread_self(), (unsigned long)gettid()); @@ -260,16 +260,44 @@ void *thr_writer(void *_count) smp_mb(); for (;;) { - node = rbtree_alloc(); rcu_copy_mutex_lock(); - key = (void *)(unsigned long)(rand() % 2048); - node->key = key; + + node = rbtree_alloc(); + key[0] = (void *)(unsigned long)(rand() % 2048); + node->key = key[0]; + rcu_rbtree_insert(&rbtree_root, node, tree_comp, rbtree_alloc, + rbtree_free); + + node = rbtree_alloc(); + key[1] = (void *)(unsigned long)(rand() % 2048); + node->key = key[1]; + rcu_rbtree_insert(&rbtree_root, node, tree_comp, rbtree_alloc, + rbtree_free); + + node = rbtree_alloc(); + key[2] = (void *)(unsigned long)(rand() % 2048); + node->key = key[2]; rcu_rbtree_insert(&rbtree_root, node, tree_comp, rbtree_alloc, rbtree_free); + + if (unlikely(wduration)) loop_sleep(wduration); - node = rcu_rbtree_search(rbtree_root, key, tree_comp); + node = rcu_rbtree_search(rbtree_root, key[2], tree_comp); + assert(node); + rcu_rbtree_remove(&rbtree_root, node, tree_comp, rbtree_alloc, + rbtree_free); + defer_rcu((void (*)(void *))rbtree_free, node); + + node = rcu_rbtree_search(rbtree_root, key[1], tree_comp); + assert(node); + rcu_rbtree_remove(&rbtree_root, node, tree_comp, rbtree_alloc, + rbtree_free); + defer_rcu((void (*)(void *))rbtree_free, node); + + node = rcu_rbtree_search(rbtree_root, key[0], tree_comp); + assert(node); rcu_rbtree_remove(&rbtree_root, node, tree_comp, rbtree_alloc, rbtree_free); defer_rcu((void (*)(void *))rbtree_free, node); -- 2.34.1