svn commit: r223845 - head/tools/regression/kqueue

Jonathan Anderson jonathan at FreeBSD.org
Thu Jul 7 18:07:04 UTC 2011


Author: jonathan
Date: Thu Jul  7 18:07:03 2011
New Revision: 223845
URL: http://svn.freebsd.org/changeset/base/223845

Log:
  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

Modified:
  head/tools/regression/kqueue/config.h
  head/tools/regression/kqueue/main.c
  head/tools/regression/kqueue/proc.c

Modified: head/tools/regression/kqueue/config.h
==============================================================================
--- head/tools/regression/kqueue/config.h	Thu Jul  7 17:44:42 2011	(r223844)
+++ head/tools/regression/kqueue/config.h	Thu Jul  7 18:07:03 2011	(r223845)
@@ -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

Modified: head/tools/regression/kqueue/main.c
==============================================================================
--- head/tools/regression/kqueue/main.c	Thu Jul  7 17:44:42 2011	(r223844)
+++ head/tools/regression/kqueue/main.c	Thu Jul  7 18:07:03 2011	(r223845)
@@ -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;

Modified: head/tools/regression/kqueue/proc.c
==============================================================================
--- head/tools/regression/kqueue/proc.c	Thu Jul  7 17:44:42 2011	(r223844)
+++ head/tools/regression/kqueue/proc.c	Thu Jul  7 18:07:03 2011	(r223845)
@@ -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);
 


More information about the svn-src-head mailing list