test wfstack: enforce external mutex if needed by default
[urcu.git] / tests / test_urcu_wfs.c
index 84e50a00b5751ac8cad89d782f852e7f44207c30..e36b822569e6a821fe3ad8841a6c9d34801ddb66 100644 (file)
@@ -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);
This page took 0.023806 seconds and 4 git commands to generate.