X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=tests%2Ftest_urcu_wfs.c;fp=tests%2Ftest_urcu_wfs.c;h=e36b822569e6a821fe3ad8841a6c9d34801ddb66;hp=cb85545a3ddad5be878a82013febd6f20bcd5c76;hb=0ee400bd2f2a5f6a62808c1c95f2d63c96b5733e;hpb=372b9ad7acc40810bbcec6a796c71b54901b3ca7 diff --git a/tests/test_urcu_wfs.c b/tests/test_urcu_wfs.c index cb85545..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; @@ -321,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"); } @@ -399,6 +402,9 @@ int main(int argc, char **argv) case 'M': test_sync = TEST_SYNC_MUTEX; break; + case 'f': + test_force_sync = 1; + break; } } @@ -406,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);