X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=test_perthreadlock.c;h=7b6a65c8c6fb18a68531e13c19587e44aad6729c;hb=2b4e41252ca7ad279d2aa91f2a011b36aa56b224;hp=076d2473976da65fc0fad262aa409e9fc8f8177f;hpb=0ee8bb0a273be9f756b20f15b675fad2572f50a8;p=urcu.git diff --git a/test_perthreadlock.c b/test_perthreadlock.c index 076d247..7b6a65c 100644 --- a/test_perthreadlock.c +++ b/test_perthreadlock.c @@ -65,39 +65,25 @@ struct per_thread_lock { static struct per_thread_lock *per_thread_lock; -static volatile int test_go; +static volatile int test_go, test_stop; static int wdelay; -static struct test_array test_array = { 8 }; +static volatile struct test_array test_array = { 8 }; static unsigned long duration; -static time_t start_time; -static unsigned long __thread duration_interval; -#define DURATION_TEST_DELAY_WRITE 4 -#define DURATION_TEST_DELAY_READ 100 /* * returns 0 if test should end. */ static int test_duration_write(void) { - if (duration_interval++ >= DURATION_TEST_DELAY_WRITE) { - duration_interval = 0; - if (time(NULL) - start_time >= duration) - return 0; - } - return 1; + return !test_stop; } static int test_duration_read(void) { - if (duration_interval++ >= DURATION_TEST_DELAY_READ) { - duration_interval = 0; - if (time(NULL) - start_time >= duration) - return 0; - } - return 1; + return !test_stop; } static unsigned long long __thread nr_writes; @@ -176,6 +162,7 @@ void *thr_writer(void *data) for (tidx = 0; tidx < nr_readers; tidx++) { pthread_mutex_lock(&per_thread_lock[tidx].lock); } + test_array.a = 0; test_array.a = 8; for (tidx = nr_readers - 1; tidx >= 0; tidx--) { pthread_mutex_unlock(&per_thread_lock[tidx].lock); @@ -285,10 +272,14 @@ int main(int argc, char **argv) exit(1); } - start_time = time(NULL); - test_go = 1; smp_mb(); + test_go = 1; + + sleep(duration); + + test_stop = 1; + for (i = 0; i < nr_readers; i++) { err = pthread_join(tid_reader[i], &tret); if (err != 0)