diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-07-05 19:21:45 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-07-05 19:21:45 +0200 |
commit | f9cf87353772ca370b7bb901d86365a564fba49f (patch) | |
tree | ca60ce1cb7c3995ae2720994de1f1165f22e57b3 | |
parent | a3f747a912c53a172388a0a0f896cb88ca3549c8 (diff) | |
download | glibc-f9cf87353772ca370b7bb901d86365a564fba49f.zip glibc-f9cf87353772ca370b7bb901d86365a564fba49f.tar.gz glibc-f9cf87353772ca370b7bb901d86365a564fba49f.tar.bz2 |
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.
-rw-r--r-- | nptl/tst-cancel4.c | 42 |
1 files changed, 38 insertions, 4 deletions
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); |