fix: handle EINTR correctly in get_cpu_mask_from_sysfs
[urcu.git] / tests / benchmark / test_rwlock.c
index 530db82f782be27b34990522a68023239732448d..b275f78a51deb4f67afe134b63d1c0cff9b2545e 100644 (file)
@@ -1,23 +1,9 @@
+// SPDX-FileCopyrightText: 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+//
+// SPDX-License-Identifier: GPL-2.0-or-later
+
 /*
- * test_urcu.c
- *
  * Userspace RCU library - test program
- *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
 #include <stdio.h>
 #include <sys/wait.h>
 #include <unistd.h>
 #include <stdio.h>
-#include <assert.h>
 #include <errno.h>
 
 #include <urcu/arch.h>
+#include <urcu/assert.h>
 #include <urcu/tls-compat.h>
 #include "thread-id.h"
 
@@ -53,8 +39,6 @@ struct test_array {
  */
 pthread_rwlock_t lock;
 
-static volatile int test_go, test_stop;
-
 static unsigned long wdelay;
 
 static volatile struct test_array test_array = { 8 };
@@ -89,7 +73,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -97,7 +81,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -116,19 +100,6 @@ static void set_affinity(void)
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
-/*
- * returns 0 if test should end.
- */
-static int test_duration_write(void)
-{
-       return !test_stop;
-}
-
-static int test_duration_read(void)
-{
-       return !test_stop;
-}
-
 static DEFINE_URCU_TLS(unsigned long long, nr_writes);
 static DEFINE_URCU_TLS(unsigned long long, nr_reads);
 
@@ -147,9 +118,7 @@ void *thr_reader(void *_count)
 
        set_affinity();
 
-       while (!test_go)
-       {
-       }
+       wait_until_go();
 
        for (;;) {
                int a, ret;
@@ -161,7 +130,7 @@ void *thr_reader(void *_count)
                }
 
                a = test_array.a;
-               assert(a == 8);
+               urcu_posix_assert(a == 8);
                if (caa_unlikely(rduration))
                        loop_sleep(rduration);
 
@@ -194,10 +163,7 @@ void *thr_writer(void *_count)
 
        set_affinity();
 
-       while (!test_go)
-       {
-       }
-       cmm_smp_mb();
+       wait_until_go();
 
        for (;;) {
                int ret;
@@ -233,7 +199,7 @@ void *thr_writer(void *_count)
 }
 
 static
-void show_usage(int argc, char **argv)
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -257,26 +223,26 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
        cmm_smp_mb();
 
        err = sscanf(argv[1], "%u", &nr_readers);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
        err = sscanf(argv[2], "%u", &nr_writers);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
        
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
@@ -286,7 +252,7 @@ int main(int argc, char **argv)
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -296,21 +262,21 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        rduration = atol(argv[++i]);
                        break;
                case 'd':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        wdelay = atol(argv[++i]);
                        break;
                case 'e':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        wduration = atol(argv[++i]);
@@ -355,13 +321,7 @@ int main(int argc, char **argv)
                        exit(1);
        }
 
-       cmm_smp_mb();
-
-       test_go = 1;
-
-       sleep(duration);
-
-       test_stop = 1;
+       test_for(duration);
 
        for (i_thr = 0; i_thr < nr_readers; i_thr++) {
                err = pthread_join(tid_reader[i_thr], &tret);
This page took 0.025904 seconds and 4 git commands to generate.