diff options
Diffstat (limited to 'lib/mlibc/tests/posix/sigtimedwait.c')
-rw-r--r-- | lib/mlibc/tests/posix/sigtimedwait.c | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/lib/mlibc/tests/posix/sigtimedwait.c b/lib/mlibc/tests/posix/sigtimedwait.c deleted file mode 100644 index 4793fc1..0000000 --- a/lib/mlibc/tests/posix/sigtimedwait.c +++ /dev/null @@ -1,91 +0,0 @@ -#include <stdio.h> - -#include <assert.h> -#include <signal.h> -#include <unistd.h> -#include <sys/wait.h> -#include <errno.h> - -pid_t parent; -pid_t child; - -int fds[2]; - -void parent_fn() { - int res; - - sigset_t set; - sigemptyset(&set); - sigaddset(&set, SIGUSR2); - sigprocmask(SIG_BLOCK, &set, NULL); - - res = write(fds[1], "!", 1); - assert(res == 1); - - siginfo_t info; - res = sigwaitinfo(&set, &info); - assert(res == SIGUSR2); - assert(info.si_signo == SIGUSR2); - - res = write(fds[1], "!", 1); - assert(res == 1); - - // XXX: This may not be long enough to get scheduled - struct timespec tout = {1, 0}; - res = sigtimedwait(&set, &info, &tout); - assert(res == SIGUSR2); - assert(info.si_signo == SIGUSR2); - - res = write(fds[1], "!", 1); - assert(res == 1); - - int sig; - res = sigwait(&set, &sig); - assert(res == 0); - assert(sig == SIGUSR2); - - res = write(fds[1], "!", 1); - assert(res == 1); - - res = sigtimedwait(&set, &info, &tout); - assert(res < 0); - assert(errno == EAGAIN); - - int wsts; - res = waitpid(child, &wsts, 0); - assert(res >= 0); -} - -void child_fn() { - int res; - char c; - - res = read(fds[0], &c, 1); - assert(res == 1); - kill(parent, SIGUSR2); - res = read(fds[0], &c, 1); - assert(res == 1); - kill(parent, SIGUSR2); - res = read(fds[0], &c, 1); - assert(res == 1); - kill(parent, SIGUSR2); - res = read(fds[0], &c, 1); - assert(res == 1); -} - -int main() { - int res; - - parent = getpid(); - assert(parent > 0); - - res = pipe(fds); - assert(res == 0); - - child = fork(); - assert(child >= 0); - if (child) - parent_fn(); - else - child_fn(); -} |