diff options
Diffstat (limited to 'tools/testing/selftests/futex/functional/futex_wait_timeout.c')
| -rw-r--r-- | tools/testing/selftests/futex/functional/futex_wait_timeout.c | 7 | 
1 files changed, 7 insertions, 0 deletions
diff --git a/tools/testing/selftests/futex/functional/futex_wait_timeout.c b/tools/testing/selftests/futex/functional/futex_wait_timeout.c index 3651ce17beeb..d183f878360b 100644 --- a/tools/testing/selftests/futex/functional/futex_wait_timeout.c +++ b/tools/testing/selftests/futex/functional/futex_wait_timeout.c @@ -24,6 +24,7 @@  static long timeout_ns = 100000;	/* 100us default timeout */  static futex_t futex_pi; +static pthread_barrier_t barrier;  void usage(char *prog)  { @@ -48,6 +49,8 @@ void *get_pi_lock(void *arg)  	if (ret != 0)  		error("futex_lock_pi failed\n", ret); +	pthread_barrier_wait(&barrier); +  	/* Blocks forever */  	ret = futex_wait(&lock, 0, NULL, 0);  	error("futex_wait failed\n", ret); @@ -130,6 +133,7 @@ int main(int argc, char *argv[])  	       basename(argv[0]));  	ksft_print_msg("\tArguments: timeout=%ldns\n", timeout_ns); +	pthread_barrier_init(&barrier, NULL, 2);  	pthread_create(&thread, NULL, get_pi_lock, NULL);  	/* initialize relative timeout */ @@ -163,6 +167,9 @@ int main(int argc, char *argv[])  	res = futex_wait_requeue_pi(&f1, f1, &futex_pi, &to, 0);  	test_timeout(res, &ret, "futex_wait_requeue_pi monotonic", ETIMEDOUT); +	/* Wait until the other thread calls futex_lock_pi() */ +	pthread_barrier_wait(&barrier); +	pthread_barrier_destroy(&barrier);  	/*  	 * FUTEX_LOCK_PI with CLOCK_REALTIME  	 * Due to historical reasons, FUTEX_LOCK_PI supports only realtime  |