X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=tests%2Ftest_urcu_wfs.c;h=e36b822569e6a821fe3ad8841a6c9d34801ddb66;hb=8af2956c86ba7556b0f7de3ad999a6b29ffbab9a;hp=84e50a00b5751ac8cad89d782f852e7f44207c30;hpb=98fbc848f22e74b85d3c98bcf626ba7fd906a6e1;p=urcu.git diff --git a/tests/test_urcu_wfs.c b/tests/test_urcu_wfs.c index 84e50a0..e36b822 100644 --- a/tests/test_urcu_wfs.c +++ b/tests/test_urcu_wfs.c @@ -78,6 +78,8 @@ enum test_sync { static enum test_sync test_sync; +static int test_force_sync; + static volatile int test_go, test_stop; static unsigned long rduration; @@ -177,7 +179,8 @@ static void *thr_enqueuer(void *_count) unsigned long long *count = _count; printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n", - "enqueuer", pthread_self(), (unsigned long)gettid()); + "enqueuer", (unsigned long) pthread_self(), + (unsigned long) gettid()); set_affinity(); @@ -206,7 +209,8 @@ fail: count[1] = URCU_TLS(nr_successful_enqueues); printf_verbose("enqueuer thread_end, thread id : %lx, tid %lu, " "enqueues %llu successful_enqueues %llu\n", - pthread_self(), (unsigned long)gettid(), + pthread_self(), + (unsigned long) gettid(), URCU_TLS(nr_enqueues), URCU_TLS(nr_successful_enqueues)); return ((void*)1); @@ -253,7 +257,8 @@ static void *thr_dequeuer(void *_count) unsigned int counter; printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n", - "dequeuer", pthread_self(), (unsigned long)gettid()); + "dequeuer", (unsigned long) pthread_self(), + (unsigned long) gettid()); set_affinity(); @@ -286,7 +291,8 @@ static void *thr_dequeuer(void *_count) printf_verbose("dequeuer thread_end, thread id : %lx, tid %lu, " "dequeues %llu, successful_dequeues %llu\n", - pthread_self(), (unsigned long)gettid(), + pthread_self(), + (unsigned long) gettid(), URCU_TLS(nr_dequeues), URCU_TLS(nr_successful_dequeues)); count[0] = URCU_TLS(nr_dequeues); count[1] = URCU_TLS(nr_successful_dequeues); @@ -317,6 +323,7 @@ static void show_usage(int argc, char **argv) printf(" [-P] (test pop_all, enabled by default)"); printf(" [-M] (use mutex external synchronization)"); printf(" Note: default: no external synchronization used."); + printf(" [-f] (force user-provided synchronization)"); printf("\n"); } @@ -395,6 +402,9 @@ int main(int argc, char **argv) case 'M': test_sync = TEST_SYNC_MUTEX; break; + case 'f': + test_force_sync = 1; + break; } } @@ -402,6 +412,17 @@ int main(int argc, char **argv) if (!test_pop && !test_pop_all) test_pop_all = 1; + if (test_sync == TEST_SYNC_NONE && nr_dequeuers > 1 && test_pop) { + if (test_force_sync) { + fprintf(stderr, "[WARNING] Using pop concurrently " + "with other pop or pop_all without external " + "synchronization. Expect run-time failure.\n"); + } else { + printf("Enforcing mutex synchronization\n"); + test_sync = TEST_SYNC_MUTEX; + } + } + printf_verbose("running test for %lu seconds, %u enqueuers, " "%u dequeuers.\n", duration, nr_enqueuers, nr_dequeuers); @@ -416,7 +437,8 @@ int main(int argc, char **argv) printf_verbose("Writer delay : %lu loops.\n", rduration); printf_verbose("Reader duration : %lu loops.\n", wdelay); printf_verbose("thread %-6s, thread id : %lx, tid %lu\n", - "main", pthread_self(), (unsigned long)gettid()); + "main", (unsigned long) pthread_self(), + (unsigned long) gettid()); tid_enqueuer = malloc(sizeof(*tid_enqueuer) * nr_enqueuers); tid_dequeuer = malloc(sizeof(*tid_dequeuer) * nr_dequeuers);