From f9cf87353772ca370b7bb901d86365a564fba49f Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 5 Jul 2020 19:21:45 +0200 Subject: tst-cancel4: deal with ENOSYS errors The Hurd port doesn't have support for sigwaitinfo, sigtimedwait, and msgget yet, so let us ignore the test for these when they return ENOSYS. * nptl/tst-cancel4.c (tf_sigwaitinfo): Fallback on sigwait when sigwaitinfo returns ENOSYS. (tf_sigtimedwait): Likewise with sigtimedwait. (tf_msgrcv, tf_msgsnd): Fallback on tf_usleep when msgget returns ENOSYS. --- nptl/tst-cancel4.c | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) (limited to 'nptl') diff --git a/nptl/tst-cancel4.c b/nptl/tst-cancel4.c index be7a48e..5250a30 100644 --- a/nptl/tst-cancel4.c +++ b/nptl/tst-cancel4.c @@ -607,7 +607,15 @@ tf_sigwaitinfo (void *arg) pthread_cleanup_push (cl, NULL); /* Wait for SIGUSR1. */ - sigwaitinfo (&mask, &info); + int ret; + ret = sigwaitinfo (&mask, &info); + if (ret == -1 && errno == ENOSYS) + { + int sig; + + printf ("sigwaitinfo not supported\n"); + sigwait (&mask, &sig); + } pthread_cleanup_pop (0); @@ -634,7 +642,15 @@ tf_sigtimedwait (void *arg) struct timespec ts = { .tv_sec = 60, .tv_nsec = 0 }; pthread_cleanup_push (cl, NULL); - sigtimedwait (&mask, &info, &ts); + int ret; + ret = sigtimedwait (&mask, &info, &ts); + if (ret == -1 && errno == ENOSYS) + { + int sig; + printf ("sigtimedwait not supported\n"); + + sigwait (&mask, &sig); + } pthread_cleanup_pop (0); @@ -1459,7 +1475,16 @@ tf_msgrcv (void *arg) { tempmsg = msgget (IPC_PRIVATE, 0666 | IPC_CREAT); if (tempmsg == -1) - FAIL_EXIT1 ("msgget (IPC_PRIVATE, 0666 | IPC_CREAT): %m"); + { + if (errno == ENOSYS) + { + printf ("msgget not supported\n"); + tf_usleep (arg); + pthread_exit (NULL); + } + else + FAIL_EXIT1 ("msgget (IPC_PRIVATE, 0666 | IPC_CREAT): %m"); + } xpthread_barrier_wait (&b2); @@ -1505,7 +1530,16 @@ tf_msgsnd (void *arg) tempmsg = msgget (IPC_PRIVATE, 0666 | IPC_CREAT); if (tempmsg == -1) - FAIL_EXIT1 ("msgget (IPC_PRIVATE, 0666 | IPC_CREAT): %m"); + { + if (errno == ENOSYS) + { + printf ("msgget not supported\n"); + tf_usleep (arg); + pthread_exit (NULL); + } + else + FAIL_EXIT1 ("msgget (IPC_PRIVATE, 0666 | IPC_CREAT): %m"); + } xpthread_barrier_wait (&b2); -- cgit v1.1