diff options
Diffstat (limited to 'misc/tst-pselect.c')
-rw-r--r-- | misc/tst-pselect.c | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/misc/tst-pselect.c b/misc/tst-pselect.c deleted file mode 100644 index 35d51d8..0000000 --- a/misc/tst-pselect.c +++ /dev/null @@ -1,128 +0,0 @@ -#include <errno.h> -#include <signal.h> -#include <stdio.h> -#include <unistd.h> -#include <sys/select.h> -#include <sys/wait.h> - - -static volatile int handler_called; - -static void -handler (int sig) -{ - handler_called = 1; -} - - -static int -do_test (void) -{ - struct sigaction sa; - sa.sa_handler = handler; - sa.sa_flags = 0; - sigemptyset (&sa.sa_mask); - - if (sigaction (SIGUSR1, &sa, NULL) != 0) - { - puts ("sigaction failed"); - return 1; - } - - sa.sa_handler = SIG_IGN; - sa.sa_flags = SA_NOCLDWAIT; - - if (sigaction (SIGCHLD, &sa, NULL) != 0) - { - puts ("2nd sigaction failed"); - return 1; - } - - if (sigblock (sigmask (SIGUSR1)) != 0) - { - puts ("sigblock failed"); - return 1; - } - - int fds[2][2]; - - if (pipe (fds[0]) != 0 || pipe (fds[1]) != 0) - { - puts ("pipe failed"); - return 1; - } - - fd_set rfds; - FD_ZERO (&rfds); - - sigset_t ss; - sigprocmask (SIG_SETMASK, NULL, &ss); - sigdelset (&ss, SIGUSR1); - - struct timespec to = { .tv_sec = 0, .tv_nsec = 500000000 }; - - pid_t parent = getpid (); - pid_t p = fork (); - if (p == 0) - { - close (fds[0][1]); - close (fds[1][0]); - - FD_SET (fds[0][0], &rfds); - - int e; - do - { - if (getppid () != parent) - exit (2); - - errno = 0; - e = pselect (fds[0][0] + 1, &rfds, NULL, NULL, &to, &ss); - } - while (e == 0); - - if (e != -1) - { - puts ("child: pselect did not fail"); - return 0; - } - if (errno != EINTR) - { - puts ("child: pselect did not set errno to EINTR"); - return 0; - } - - TEMP_FAILURE_RETRY (write (fds[1][1], "foo", 3)); - - exit (0); - } - - close (fds[0][0]); - close (fds[1][1]); - - FD_SET (fds[1][0], &rfds); - - kill (p, SIGUSR1); - - int e = pselect (fds[1][0] + 1, &rfds, NULL, NULL, NULL, &ss); - if (e == -1) - { - puts ("parent: pselect failed"); - return 1; - } - if (e != 1) - { - puts ("parent: pselect did not report readable fd"); - return 1; - } - if (!FD_ISSET (fds[1][0], &rfds)) - { - puts ("parent: pselect reports wrong fd"); - return 1; - } - - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" |