From 5b2daa7c975c336796e46b633db739c3f6286f67 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Thu, 23 Mar 2006 15:52:16 +0000 Subject: [PATCH] * winsup.api/checksignal.c (main): Add test for siginterrupt. --- winsup/testsuite/ChangeLog | 4 ++ winsup/testsuite/winsup.api/checksignal.c | 71 ++++++++++++++--------- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/winsup/testsuite/ChangeLog b/winsup/testsuite/ChangeLog index 5fb31a8a3..2b7c91b80 100644 --- a/winsup/testsuite/ChangeLog +++ b/winsup/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2006-03-23 Christopher Faylor + + * winsup.api/checksignal.c (main): Add test for siginterrupt. + 2006-01-02 Christopher Faylor * cygload/README: Delete. diff --git a/winsup/testsuite/winsup.api/checksignal.c b/winsup/testsuite/winsup.api/checksignal.c index edf720c87..47dc2f6a0 100644 --- a/winsup/testsuite/winsup.api/checksignal.c +++ b/winsup/testsuite/winsup.api/checksignal.c @@ -21,12 +21,10 @@ main () int fds[2]; char buf[10]; struct sigaction act; + int i; Tst_count = 0; - if (pipe (fds) < 0) - tst_brk (TBROK, NULL, NULL, "Create pipe"); - /* Reset SA_RESTART flag. */ while ((ret = sigaction (SIGALRM, NULL, &act)) == EINTR) ; @@ -38,36 +36,53 @@ main () if (ret) tst_brk (TBROK, NULL, NULL, "Reset SA_RESTART"); - /* Set signal handler using signal(2) call... */ - if (signal (SIGALRM, sig_handler) < 0) - tst_brk (TBROK, NULL, NULL, "Call signal() to install signal handler"); - /* ...and check if signal(2) sets SA_RESTART again. */ - while ((ret = sigaction (SIGALRM, NULL, &act)) == EINTR) - ; - if (ret) - tst_brk (TBROK, NULL, NULL, "Get signal action structure"); - tst_resm (act.sa_flags & SA_RESTART ? TPASS : TFAIL, - "signal() sets SA_RESTART"); + for (i = 0; i < 2; i++) + { + if (pipe (fds) < 0) + tst_brk (TBROK, NULL, NULL, "Create pipe"); + /* Set signal handler using signal(2) call... */ + if (signal (SIGALRM, sig_handler) < 0) + tst_brk (TBROK, NULL, NULL, "Call signal() to install signal handler"); + /* ...and check if signal(2) sets SA_RESTART again. */ + while ((ret = sigaction (SIGALRM, NULL, &act)) == EINTR) + ; + if (ret) + tst_brk (TBROK, NULL, NULL, "Get signal action structure"); + tst_resm (act.sa_flags & SA_RESTART ? TPASS : TFAIL, + "signal() sets SA_RESTART"); - /* Reset SA_RESTART flag again. */ - act.sa_handler = sig_handler; - act.sa_flags &= ~SA_RESTART; - while ((ret = sigaction (SIGALRM, &act, NULL)) == EINTR) - ; - if (ret) - tst_brk (TBROK, NULL, NULL, "Reset SA_RESTART"); + const char *msg1, *msg2; + if (i == 1) + { + siginterrupt (SIGALRM, 1); + msg1 = "Reset SA_RESTART via siginterrupt"; + msg2 = "Set EINTR on interrupted read() call via siginterrupt"; + } + else + { + /* Reset SA_RESTART flag again. */ + act.sa_handler = sig_handler; + act.sa_flags &= ~SA_RESTART; + while ((ret = sigaction (SIGALRM, &act, NULL)) == EINTR) + ; + msg1 = "Reset SA_RESTART via sigaction"; + msg2 = "Set EINTR on interrupted read() call via sigaction"; + } + if (ret) + tst_brk (TBROK, NULL, NULL, msg1); - /* Start timer to force a SIGALRM. */ - alarm (1); + /* Start timer to force a SIGALRM. */ + alarm (1); - /* Call read(2) to check if the EINTR errno is correctly preserved, - even if the signal handler routine changes errno. */ - n = read(fds[0], buf, 10); - tst_resm (n < 0 && errno == EINTR ? TPASS : TFAIL, - "Set EINTR on interrupted read() call"); + /* Call read(2) to check if the EINTR errno is correctly preserved, + even if the signal handler routine changes errno. */ + n = read(fds[0], buf, 10); + tst_resm (n < 0 && errno == EINTR ? TPASS : TFAIL, msg2); + close (fds[0]); + close (fds[1]); + } /* Check if another errno is correctly returned (here EBADF). */ - close (fds[0]); n = read(fds[0], buf, 10); tst_resm (n < 0 && errno == EBADF ? TPASS : TFAIL, "Set EBADF on closed file descriptor");