X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=tests%2Fregression%2Frcutorture.h;h=b3a300c7a1d8d63c816828e5ae49720fa7458246;hb=a6ca497d47f123d2fa49675816d52b7541f3509c;hp=49dbff689e9e9da835aa2186a6ec3a711192e1b9;hpb=eb218d4f6b78a5a6e89e65d6416879d91c679141;p=urcu.git diff --git a/tests/regression/rcutorture.h b/tests/regression/rcutorture.h index 49dbff6..b3a300c 100644 --- a/tests/regression/rcutorture.h +++ b/tests/regression/rcutorture.h @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2008 Paul E. McKenney, IBM Corporation. +// +// SPDX-License-Identifier: GPL-2.0-or-later + /* * rcutorture.h: simple user-level performance/stress test of RCU. * @@ -43,22 +47,6 @@ * line lists the number of readers observing progressively more stale * data. A correct RCU implementation will have all but the first two * numbers non-zero. - * - * 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. - * - * Copyright (c) 2008 Paul E. McKenney, IBM Corporation. */ /* @@ -348,6 +336,7 @@ void *rcu_read_stress_test(void *arg __attribute__((unused))) static pthread_mutex_t call_rcu_test_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t call_rcu_test_cond = PTHREAD_COND_INITIALIZER; +static bool call_rcu_wait; static void rcu_update_stress_test_rcu(struct rcu_head *head __attribute__((unused))) @@ -368,6 +357,7 @@ void rcu_update_stress_test_rcu(struct rcu_head *head __attribute__((unused))) strerror(errno)); abort(); } + call_rcu_wait = false; ret = pthread_mutex_unlock(&call_rcu_test_mutex); if (ret) { errno = ret; @@ -449,8 +439,11 @@ void *rcu_update_stress_test(void *arg __attribute__((unused))) * immediately after call_rcu (call_rcu needs * us to be registered RCU readers). */ - ret = pthread_cond_wait(&call_rcu_test_cond, - &call_rcu_test_mutex); + call_rcu_wait = true; + do { + ret = pthread_cond_wait(&call_rcu_test_cond, + &call_rcu_test_mutex); + } while (call_rcu_wait); if (ret) { errno = ret; diag("pthread_cond_signal: %s", @@ -572,7 +565,7 @@ int stresstest(int nreaders) */ static -void usage(char *argv[]) __attribute__((noreturn)); +void usage(char *argv[]) __attribute__((__noreturn__)); static void usage(char *argv[])