summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2005-11-07 14:10:33 +0000
committerdavidxu <davidxu@FreeBSD.org>2005-11-07 14:10:33 +0000
commit18fc4b11b970023df7ac96da6c60462df4f58391 (patch)
treef992796d09263e5cde6cf33d806219592faab8e3 /tools
parent02881cfb024c13140f8d62ba581f3c76bb077758 (diff)
downloadFreeBSD-src-18fc4b11b970023df7ac96da6c60462df4f58391.zip
FreeBSD-src-18fc4b11b970023df7ac96da6c60462df4f58391.tar.gz
Add sigqueue test code.
Diffstat (limited to 'tools')
-rw-r--r--tools/regression/sigqueue/Makefile5
-rw-r--r--tools/regression/sigqueue/sigqtest1/Makefile8
-rw-r--r--tools/regression/sigqueue/sigqtest1/sigqtest1.c49
3 files changed, 62 insertions, 0 deletions
diff --git a/tools/regression/sigqueue/Makefile b/tools/regression/sigqueue/Makefile
new file mode 100644
index 0000000..d3046c4
--- /dev/null
+++ b/tools/regression/sigqueue/Makefile
@@ -0,0 +1,5 @@
+# $FreeBSD$
+
+SUBDIR=sigqtest1
+
+.include <bsd.subdir.mk>
diff --git a/tools/regression/sigqueue/sigqtest1/Makefile b/tools/regression/sigqueue/sigqtest1/Makefile
new file mode 100644
index 0000000..08a140c
--- /dev/null
+++ b/tools/regression/sigqueue/sigqtest1/Makefile
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+PROG=sigqtest1
+LDADD+=
+NO_MAN=
+DEBUG_FLAGS=-g
+
+.include <bsd.prog.mk>
diff --git a/tools/regression/sigqueue/sigqtest1/sigqtest1.c b/tools/regression/sigqueue/sigqtest1/sigqtest1.c
new file mode 100644
index 0000000..0f40021
--- /dev/null
+++ b/tools/regression/sigqueue/sigqtest1/sigqtest1.c
@@ -0,0 +1,49 @@
+/* $FreeBSD$ */
+#include <signal.h>
+#include <stdio.h>
+#include <err.h>
+#include <errno.h>
+
+int received;
+
+void handler(int sig, siginfo_t *si, void *ctx)
+{
+ if (si->si_code != SI_QUEUE)
+ errx(1, "si_code != SI_QUEUE");
+ if (si->si_value.sival_int != received)
+ errx(1, "signal is out of order");
+ received++;
+}
+
+int main()
+{
+ struct sigaction sa;
+ union sigval val;
+ int ret;
+ int i;
+ sigset_t set;
+
+ sa.sa_flags = SA_SIGINFO;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_sigaction = handler;
+ sigaction(SIGRTMIN, &sa, NULL);
+ sigemptyset(&set);
+ sigaddset(&set, SIGRTMIN);
+ sigprocmask(SIG_BLOCK, &set, NULL);
+ i = 0;
+ for (;;) {
+ val.sival_int = i;
+ ret = sigqueue(getpid(), SIGRTMIN, val);
+ if (ret == -1) {
+ if (errno != EAGAIN) {
+ errx(1, "errno != EAGAIN");
+ }
+ break;
+ }
+ i++;
+ }
+ sigprocmask(SIG_UNBLOCK, &set, NULL);
+ if (received != i)
+ errx(1, "error, signal lost");
+ printf("OK\n");
+}
OpenPOWER on IntegriCloud