X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;ds=sidebyside;f=test_urcu_gc.c;h=6d7d8ca53a10088283d5c0843ab3c0b22bff203c;hb=4aa7451e29e7fc23cfbf7ba77c95041de9647872;hp=f1cce248a8b604709ffcb9e3a265c1f983bc03f7;hpb=2a7ac59da1436b86d7cb59fb8b5712c7d98c1519;p=urcu.git diff --git a/test_urcu_gc.c b/test_urcu_gc.c index f1cce24..6d7d8ca 100644 --- a/test_urcu_gc.c +++ b/test_urcu_gc.c @@ -105,22 +105,33 @@ static unsigned int cpu_affinities[NR_CPUS]; static unsigned int next_aff = 0; static int use_affinity = 0; +pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; + static void set_affinity(void) { cpu_set_t mask; int cpu; + int ret; if (!use_affinity) return; + ret = pthread_mutex_lock(&affinity_mutex); + if (ret) { + perror("Error in pthread mutex lock"); + exit(-1); + } cpu = cpu_affinities[next_aff++]; + ret = pthread_mutex_unlock(&affinity_mutex); + if (ret) { + perror("Error in pthread mutex unlock"); + exit(-1); + } CPU_ZERO(&mask); CPU_SET(cpu, &mask); sched_setaffinity(0, sizeof(mask), &mask); } - - /* * returns 0 if test should end. */ @@ -254,13 +265,8 @@ void *thr_writer(void *data) for (;;) { new = malloc(sizeof(*new)); - rcu_copy_mutex_lock(); - old = test_rcu_pointer; - if (old) - assert(old->a == 8); new->a = 8; old = rcu_xchg_pointer(&test_rcu_pointer, new); - rcu_copy_mutex_unlock(); rcu_gc_reclaim(wtidx, old); nr_writes++; if (unlikely(!test_duration_write()))