summaryrefslogtreecommitdiffstats
path: root/regress/sys/kern/kqueue/kqueue-process.c
diff options
context:
space:
mode:
authoruebayasi <uebayasi@openbsd.org>2015-08-13 10:26:54 +0000
committeruebayasi <uebayasi@openbsd.org>2015-08-13 10:26:54 +0000
commita7c05c9727dec079a6a46efa1c402d3370e34ffd (patch)
treeed347936abce08b1237f91169ab0ccac93e5d246 /regress/sys/kern/kqueue/kqueue-process.c
parentZero-clear test buffers. Close fds. (diff)
downloadwireguard-openbsd-a7c05c9727dec079a6a46efa1c402d3370e34ffd.tar.xz
wireguard-openbsd-a7c05c9727dec079a6a46efa1c402d3370e34ffd.zip
NOTE_FORK|NOTE_TRACK knote can track grandchild processes. Wait for
both child/grandchild process events.
Diffstat (limited to 'regress/sys/kern/kqueue/kqueue-process.c')
-rw-r--r--regress/sys/kern/kqueue/kqueue-process.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/regress/sys/kern/kqueue/kqueue-process.c b/regress/sys/kern/kqueue/kqueue-process.c
index 0c602593998..d4dfa8d02e9 100644
--- a/regress/sys/kern/kqueue/kqueue-process.c
+++ b/regress/sys/kern/kqueue/kqueue-process.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kqueue-process.c,v 1.7 2015/08/02 02:42:22 uebayasi Exp $ */
+/* $OpenBSD: kqueue-process.c,v 1.8 2015/08/13 10:26:54 uebayasi Exp $ */
/*
* Written by Artur Grabowski <art@openbsd.org> 2002 Public Domain
*/
@@ -105,18 +105,24 @@ do_process(void)
kill(pid2, SIGUSR1); /* sync 2.1 */
kill(pid, SIGUSR1); /* sync 2 */
+ /* Wait for child's exit. */
if (wait(&status) < 0)
err(1, "wait");
+ /* Wait for child-child's exec/exit to receive two events at once. */
+ sleep(1);
- for (i = 0; i < 1; i++) {
- /* make sure we get an exit note */
+ for (i = 0; i < 2; i++) {
ASS(kevent(kq, NULL, 0, &ke, 1, &ts) == 1,
warnx("didn't receive event"));
ASSX(ke.filter == EVFILT_PROC);
switch (ke.fflags) {
case NOTE_EXIT:
ASSX((pid_t)ke.ident == pid);
- fprintf(stderr, "exit %d\n", pid);
+ fprintf(stderr, "child exit %d\n", pid);
+ break;
+ case NOTE_EXEC | NOTE_EXIT:
+ ASSX((pid_t)ke.ident == pid2);
+ fprintf(stderr, "child-child exec/exit %d\n", pid2);
break;
default:
errx(1, "kevent returned weird event 0x%x pid %d",