From: Olivier Dion Date: Fri, 14 Jul 2023 16:59:23 +0000 (-0400) Subject: tests/regression/rcutorture: Add wait state X-Git-Tag: v0.14.1~14 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=ad79eaca302be2f16a525829df3f6a443110336c;p=userspace-rcu.git tests/regression/rcutorture: Add wait state pthread_cond_wait(3) can have spurious wakeups. Fix this by polling a state associated with the the wait. Change-Id: Iba034cba5f72ad88388d1b90a6093f4ae9f9beb9 Signed-off-by: Olivier Dion Signed-off-by: Mathieu Desnoyers --- diff --git a/tests/regression/rcutorture.h b/tests/regression/rcutorture.h index bc394f9..fbb22f8 100644 --- a/tests/regression/rcutorture.h +++ b/tests/regression/rcutorture.h @@ -348,6 +348,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 +369,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 +451,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",