From fa67f6aedcfdaffc14cbf0b631253477b2565ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dirk=20M=C3=BCller?= Date: Tue, 5 Jul 2022 15:29:39 +0200 Subject: [PATCH] Handle EINTR in tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On an otherwise busy machine the test suite is quite flaky. Restart the syscalls that are aborted with EINTR. Signed-off-by: Dirk Müller Link: https://lore.kernel.org/r/20220705132939.7744-1-dirk@dmllr.de Signed-off-by: Jens Axboe --- test/ce593a6c480a.c | 5 ++++- test/io-cancel.c | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/test/ce593a6c480a.c b/test/ce593a6c480a.c index 1c5669ee..4c71fbc6 100644 --- a/test/ce593a6c480a.c +++ b/test/ce593a6c480a.c @@ -111,7 +111,10 @@ int main(int argc, char *argv[]) (void*) (intptr_t) other_fd); /* Wait on the event fd for an event to be ready */ - ret = read(loop_fd, buf, 8); + do { + ret = read(loop_fd, buf, 8); + } while (ret < 0 && errno == EINTR); + if (ret < 0) { perror("read"); return T_EXIT_FAIL; diff --git a/test/io-cancel.c b/test/io-cancel.c index d5e3ae9f..13bf84f6 100644 --- a/test/io-cancel.c +++ b/test/io-cancel.c @@ -365,8 +365,13 @@ static int test_cancel_req_across_fork(void) exit(0); } else { int wstatus; + pid_t childpid; - if (waitpid(p, &wstatus, 0) == (pid_t)-1) { + do { + childpid = waitpid(p, &wstatus, 0); + } while (childpid == (pid_t)-1 && errno == EINTR); + + if (childpid == (pid_t)-1) { perror("waitpid()"); return 1; }