fix: handle EINTR correctly in get_cpu_mask_from_sysfs
[urcu.git] / tests / benchmark / test_urcu_wfcq.c
index 3cae9b75e76fb015d1715291043ade7d9fc8d4fa..71bca100cd45670e15ff452eabfab389b0023d1a 100644 (file)
@@ -1,24 +1,10 @@
+// SPDX-FileCopyrightText: 2010 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+// SPDX-FileCopyrightText: 2010 Paolo Bonzini <pbonzini@redhat.com>
+//
+// SPDX-License-Identifier: GPL-2.0-or-later
+
 /*
- * test_urcu_wfcq.c
- *
  * Userspace RCU library - example RCU-based lock-free concurrent queue
- *
- * Copyright February 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- * Copyright February 2010 - Paolo Bonzini <pbonzini@redhat.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 <urcu/uatomic.h>
 #include "thread-id.h"
@@ -56,7 +42,7 @@ static enum test_sync test_sync;
 
 static int test_force_sync;
 
-static volatile int test_go, test_stop_enqueue, test_stop_dequeue;
+static volatile int test_stop_enqueue, test_stop_dequeue;
 
 static unsigned long rduration;
 
@@ -122,12 +108,12 @@ static void set_affinity(void)
  */
 static int test_duration_dequeue(void)
 {
-       return !test_stop_dequeue;
+       return !uatomic_load(&test_stop_dequeue, CMM_RELAXED);
 }
 
 static int test_duration_enqueue(void)
 {
-       return !test_stop_enqueue;
+       return !uatomic_load(&test_stop_enqueue, CMM_RELAXED);
 }
 
 static DEFINE_URCU_TLS(unsigned long long, nr_dequeues);
@@ -155,10 +141,7 @@ static void *thr_enqueuer(void *_count)
 
        set_affinity();
 
-       while (!test_go)
-       {
-       }
-       cmm_smp_mb();
+       wait_until_go();
 
        for (;;) {
                struct cds_wfcq_node *node = malloc(sizeof(*node));
@@ -233,7 +216,7 @@ static void do_test_splice(enum test_sync sync)
 
        switch (ret) {
        case CDS_WFCQ_RET_WOULDBLOCK:
-               assert(0);      /* blocking call */
+               urcu_posix_assert(0);   /* blocking call */
                break;
        case CDS_WFCQ_RET_DEST_EMPTY:
                URCU_TLS(nr_splice)++;
@@ -241,7 +224,7 @@ static void do_test_splice(enum test_sync sync)
                /* ok */
                break;
        case CDS_WFCQ_RET_DEST_NON_EMPTY:
-               assert(0);      /* entirely unexpected */
+               urcu_posix_assert(0);   /* entirely unexpected */
                break;
        case CDS_WFCQ_RET_SRC_EMPTY:
                /* ok, we could even skip iteration on dest if we wanted */
@@ -266,10 +249,7 @@ static void *thr_dequeuer(void *_count)
 
        set_affinity();
 
-       while (!test_go)
-       {
-       }
-       cmm_smp_mb();
+       wait_until_go();
 
        for (;;) {
                if (test_dequeue && test_splice) {
@@ -482,7 +462,7 @@ int main(int argc, char **argv)
 
        cmm_smp_mb();
 
-       test_go = 1;
+       begin_test();
 
        for (i_thr = 0; i_thr < duration; i_thr++) {
                sleep(1);
@@ -492,7 +472,7 @@ int main(int argc, char **argv)
                }
        }
 
-       test_stop_enqueue = 1;
+       uatomic_store(&test_stop_enqueue, 1, CMM_RELEASE);
 
        if (test_wait_empty) {
                while (nr_enqueuers != uatomic_read(&test_enqueue_stopped)) {
@@ -503,7 +483,7 @@ int main(int argc, char **argv)
                }
        }
 
-       test_stop_dequeue = 1;
+       uatomic_store(&test_stop_dequeue, 1, CMM_RELAXED);
 
        for (i_thr = 0; i_thr < nr_enqueuers; i_thr++) {
                err = pthread_join(tid_enqueuer[i_thr], &tret);
This page took 0.0247270000000001 seconds and 4 git commands to generate.