Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2006-03-23 18:52:16 +0300
committerChristopher Faylor <me@cgf.cx>2006-03-23 18:52:16 +0300
commit5b2daa7c975c336796e46b633db739c3f6286f67 (patch)
tree805e27a4055d2f300ff8b478e87b68e388df4660 /winsup/testsuite
parente3e63ca72ba7f821222879e8db33649f1a70b201 (diff)
* winsup.api/checksignal.c (main): Add test for siginterrupt.
Diffstat (limited to 'winsup/testsuite')
-rw-r--r--winsup/testsuite/ChangeLog4
-rw-r--r--winsup/testsuite/winsup.api/checksignal.c71
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 <cgf@timesys.com>
+
+ * winsup.api/checksignal.c (main): Add test for siginterrupt.
+
2006-01-02 Christopher Faylor <cgf@timesys.com>
* 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");