static unsigned long __thread lookup_fail;
static unsigned long __thread lookup_ok;
-static struct rcu_ht *test_ht;
+static struct cds_lfht *test_ht;
struct test_data {
int a;
#define printf_verbose(fmt, args...) \
do { \
if (verbose_mode) \
- printf(fmt, args); \
+ printf(fmt, ## args); \
} while (0)
static unsigned int cpu_affinities[NR_CPUS];
void *thr_reader(void *_count)
{
unsigned long long *count = _count;
- struct rcu_ht_node *node;
+ struct cds_lfht_node *node;
printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
"reader", pthread_self(), (unsigned long)gettid());
for (;;) {
rcu_read_lock();
- node = ht_lookup(test_ht,
+ node = cds_lfht_lookup(test_ht,
(void *)(unsigned long)(rand_r(&rand_lookup) % rand_pool),
sizeof(void *));
if (node == NULL)
static
void free_node_cb(struct rcu_head *head)
{
- struct rcu_ht_node *node =
- caa_container_of(head, struct rcu_ht_node, head);
+ struct cds_lfht_node *node =
+ caa_container_of(head, struct cds_lfht_node, head);
free(node);
}
void *thr_writer(void *_count)
{
- struct rcu_ht_node *node, *ret_node;
+ struct cds_lfht_node *node, *ret_node;
struct wr_count *count = _count;
int ret;
for (;;) {
if (add_only || rand_r(&rand_lookup) & 1) {
- node = malloc(sizeof(struct rcu_ht_node));
+ node = malloc(sizeof(struct cds_lfht_node));
rcu_read_lock();
- ht_node_init(node,
+ cds_lfht_node_init(node,
(void *)(unsigned long)(rand_r(&rand_lookup) % rand_pool),
sizeof(void *));
if (add_unique)
- ret_node = ht_add_unique(test_ht, node);
+ ret_node = cds_lfht_add_unique(test_ht, node);
else
- ht_add(test_ht, node);
+ cds_lfht_add(test_ht, node);
rcu_read_unlock();
if (add_unique && ret_node != node) {
free(node);
} else {
/* May delete */
rcu_read_lock();
- node = ht_lookup(test_ht,
+ node = cds_lfht_lookup(test_ht,
(void *)(unsigned long)(rand_r(&rand_lookup) % rand_pool),
sizeof(void *));
if (node)
- ret = ht_remove(test_ht, node);
+ ret = cds_lfht_remove(test_ht, node);
else
ret = -ENOENT;
rcu_read_unlock();
tid_writer = malloc(sizeof(*tid_writer) * nr_writers);
count_reader = malloc(sizeof(*count_reader) * nr_readers);
count_writer = malloc(sizeof(*count_writer) * nr_writers);
- test_ht = ht_new(test_hash, test_compare, 0x42UL,
+ test_ht = cds_lfht_new(test_hash, test_compare, 0x42UL,
init_hash_size, call_rcu);
err = create_all_cpu_call_rcu_data(0);
tot_add += count_writer[i].add;
tot_remove += count_writer[i].remove;
}
- ht_count_nodes(test_ht, &count, &removed);
+ printf("Counting nodes... ");
+ fflush(stdout);
+ cds_lfht_count_nodes(test_ht, &count, &removed);
+ printf("done.\n");
if (count || removed)
printf("WARNING: nodes left in the hash table upon destroy: "
"%lu nodes + %lu logically removed.\n", count, removed);
- (void) ht_destroy(test_ht);
+ ret = cds_lfht_destroy(test_ht);
- printf_verbose("final delete: %d items\n", ret);
+ if (ret)
+ printf_verbose("final delete aborted\n");
+ else
+ printf_verbose("final delete success\n");
printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads,
tot_writes);
printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu "