summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Leonard <d@cvs.openbsd.org>2000-01-04 00:17:47 +0000
committerDavid Leonard <d@cvs.openbsd.org>2000-01-04 00:17:47 +0000
commit0d49cb5f8d661e8ddc78ec9624deaf2ab5437d1e (patch)
tree010f51e702a59081d1ba64c5d17e3ca33bcfdc86
parent40ac6ccc6249d504cde2c88df9f90dfcc81f003f (diff)
Test some signal handling
-rw-r--r--lib/libc_r/TEST/test_signal.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/libc_r/TEST/test_signal.c b/lib/libc_r/TEST/test_signal.c
new file mode 100644
index 00000000000..2661d4aff89
--- /dev/null
+++ b/lib/libc_r/TEST/test_signal.c
@@ -0,0 +1,48 @@
+/* $OpenBSD: test_signal.c,v 1.1 2000/01/04 00:17:46 d Exp $ */
+
+/*
+ * This program tests signal handler re-entrancy.
+ */
+
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include "test.h"
+
+void *
+sleeper(arg)
+ void *arg;
+{
+ sigset_t mask;
+
+ /* Ignore all signals in this thread */
+ sigfillset(&mask);
+ CHECKe(sigprocmask(SIG_SETMASK, &mask, NULL));
+
+ ASSERT(sleep(10) == 0);
+ SUCCEED;
+}
+
+void
+handler(sig)
+ int sig;
+{
+ printf("signal handler %d\n", sig);
+ alarm(1);
+ signal(SIGALRM, handler);
+}
+
+int
+main()
+{
+ pthread_t slpr;
+
+ ASSERT(signal(SIGALRM, handler) != SIG_ERR);
+ CHECKe(alarm(1));
+ /* CHECKr(pthread_create(&slpr, NULL, sleeper, NULL)); */
+ /* ASSERT(sleep(1) == 0); */
+ for (;;)
+ CHECKe(write(STDOUT_FILENO, ".", 1));
+}