From e16f0976fce014d88caaec5f7cc84dac0072534b Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Tue, 25 Feb 2014 18:04:18 +0400 Subject: [PATCH] zdtm/maps007: remove spinlocks from the test Use futex for synchronization instead of spinning on atomic variables. Signed-off-by: Andrey Vagin Signed-off-by: Pavel Emelyanov --- test/zdtm/live/transition/maps007.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/zdtm/live/transition/maps007.c b/test/zdtm/live/transition/maps007.c index ea09a76e7..9dd561c58 100644 --- a/test/zdtm/live/transition/maps007.c +++ b/test/zdtm/live/transition/maps007.c @@ -80,13 +80,12 @@ int main(int argc, char **argv) if (child) { futex_wait_while_gt(&shm->delta, 2 * MAX_DELTA); - futex_inc(&shm->delta); + futex_inc_and_wake(&shm->delta); } else { if (!futex_get(&shm->stop)) - /* MAX_DELTA steps behind the parent */ - while (futex_get(&shm->delta) < MAX_DELTA && - !futex_get(&shm->stop)); - else if (atomic_get(&shm->delta) == 0) + futex_wait_while_lt(&shm->delta, MAX_DELTA); + + if (futex_get(&shm->stop) && atomic_get(&shm->delta) == MAX_DELTA) break; futex_dec_and_wake(&shm->delta); } @@ -130,6 +129,7 @@ int main(int argc, char **argv) /* stop the child */ futex_set(&shm->stop, 1); + futex_add_and_wake(&shm->delta, MAX_DELTA); /* wait until the child will be in the same point */ futex_wait_until(&shm->stop, 2);