summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorjonathan <jonathan@FreeBSD.org>2011-07-07 18:07:03 +0000
committerjonathan <jonathan@FreeBSD.org>2011-07-07 18:07:03 +0000
commitf1301f9a76f64361bb7eefc6d0e275bedb2b2b4c (patch)
treef40dbd027ae029159206ef752c984c56ebb54415 /tools
parentb468f23f53f72f2ea48e9e486838dcaecafa6c75 (diff)
downloadFreeBSD-src-f1301f9a76f64361bb7eefc6d0e275bedb2b2b4c.zip
FreeBSD-src-f1301f9a76f64361bb7eefc6d0e275bedb2b2b4c.tar.gz
Ensure that kqueue is not inherited across fork().
Modify the existing unit test (from libkqueue) which already exercises process events via fork() and kill(). Now, the child process simply checks that the 'kqfd' descriptor is invalid. Some minor modifications were required to make err() work correctly. It seems that this test was imported using the output of a configure script, but config.h was not included in key places, nor was its syntax correct (need '#define HAVE_FOO 1' rather than '#define HAVE_FOO'). Finally, change main() to run the "proc" suite by default, but widened the '#if TODO' in proc.c to include the non-functioning test event_trigger(). Approved by: mentor (rwatson), re (Capsicum blanket) Sponsored by: Google Inc
Diffstat (limited to 'tools')
-rw-r--r--tools/regression/kqueue/config.h8
-rw-r--r--tools/regression/kqueue/main.c3
-rw-r--r--tools/regression/kqueue/proc.c16
3 files changed, 21 insertions, 6 deletions
diff --git a/tools/regression/kqueue/config.h b/tools/regression/kqueue/config.h
index 2a377db..9ca8cde 100644
--- a/tools/regression/kqueue/config.h
+++ b/tools/regression/kqueue/config.h
@@ -1,7 +1,7 @@
-/* AUTOMATICALLY GENERATED -- DO NOT EDIT */
-/* $FreeBSD$ */
-#define HAVE_ERR_H
-#define HAVE_SYS_EVENT_H
+# $FreeBSD$
+
+#define HAVE_ERR_H 1
+#define HAVE_SYS_EVENT_H 1
#define HAVE_EV_DISPATCH 1
#define HAVE_EV_RECEIPT 1
#undef HAVE_NOTE_TRUNCATE
diff --git a/tools/regression/kqueue/main.c b/tools/regression/kqueue/main.c
index 182003c..f76c4e2 100644
--- a/tools/regression/kqueue/main.c
+++ b/tools/regression/kqueue/main.c
@@ -18,6 +18,7 @@
#include <sys/types.h>
+#include "config.h"
#include "common.h"
int testnum = 1;
@@ -230,7 +231,7 @@ test_kqueue_close(void)
int
main(int argc, char **argv)
{
- int test_proc = 0; /* XXX-FIXME */
+ int test_proc = 1;
int test_socket = 1;
int test_signal = 1;
int test_vnode = 1;
diff --git a/tools/regression/kqueue/proc.c b/tools/regression/kqueue/proc.c
index d4e863e..2835c64 100644
--- a/tools/regression/kqueue/proc.c
+++ b/tools/regression/kqueue/proc.c
@@ -16,6 +16,11 @@
* $FreeBSD$
*/
+#include <sys/stat.h>
+
+#include <err.h>
+
+#include "config.h"
#include "common.h"
static int sigusr1_caught = 0;
@@ -37,6 +42,11 @@ add_and_delete(void)
/* Create a child that waits to be killed and then exits */
pid = fork();
if (pid == 0) {
+ struct stat s;
+ if ((fstat(kqfd, &s) != -1) || (errno != EBADF))
+ err(1, "%s:%d - %s: fstat(kqfd) in child did not return EBADF",
+ __FILE__, __LINE__, __func__);
+
pause();
exit(2);
}
@@ -52,6 +62,7 @@ add_and_delete(void)
test_begin("kevent(EVFILT_PROC, EV_DELETE)");
+ sleep(1);
test_no_kevents();
kevent_add(kqfd, &kev, pid, EVFILT_PROC, EV_DELETE, 0, 0, NULL);
if (kill(pid, SIGKILL) < 0)
@@ -63,6 +74,7 @@ add_and_delete(void)
}
+#ifdef TODO
static void
event_trigger(void)
{
@@ -93,7 +105,6 @@ event_trigger(void)
success();
}
-#ifdef TODO
void
test_kevent_signal_disable(void)
{
@@ -225,7 +236,10 @@ test_evfilt_proc()
signal(SIGUSR1, sig_handler);
add_and_delete();
+
+#if TODO
event_trigger();
+#endif
signal(SIGUSR1, SIG_DFL);
OpenPOWER on IntegriCloud