svn commit: r306962 - head/tests/sys/kern/pipe

Ruslan Bukin br at FreeBSD.org
Mon Oct 10 13:40:06 UTC 2016


Author: br
Date: Mon Oct 10 13:40:05 2016
New Revision: 306962
URL: https://svnweb.freebsd.org/changeset/base/306962

Log:
  Ensure data in pipe is available to read.
  Useful for latest (5th, direct mode) test only.
  
  Sponsored by:	DARPA, AFRL
  Sponsored by:	HEIF5

Modified:
  head/tests/sys/kern/pipe/pipe_fstat_bug_test.c

Modified: head/tests/sys/kern/pipe/pipe_fstat_bug_test.c
==============================================================================
--- head/tests/sys/kern/pipe/pipe_fstat_bug_test.c	Mon Oct 10 11:53:54 2016	(r306961)
+++ head/tests/sys/kern/pipe/pipe_fstat_bug_test.c	Mon Oct 10 13:40:05 2016	(r306962)
@@ -26,6 +26,7 @@ SUCH DAMAGE.
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/wait.h>
+#include <sys/event.h>
 #include <assert.h>
 #include <err.h>
 #include <errno.h>
@@ -49,10 +50,12 @@ main(void)
 {
 	char buffer[32768], buffer2[32768], go[] = "go", go2[] = "go2";
 	int desc[2], ipc_coord[2];
+	struct kevent event, ke;
 	ssize_t error;
 	int successes = 0;
 	struct stat status;
 	pid_t new_pid;
+	int kq;
 
 	error = pipe(desc);
 	if (error == -1)
@@ -118,9 +121,24 @@ main(void)
 		_exit(0);
 	}
 
+	kq = kqueue();
+	if (kq == -1)
+		_exit(1);
+
+	EV_SET(&ke, desc[0], EVFILT_READ, EV_ADD, 0, 0, NULL);
+
+	/* Attach event to the kqueue. */
+	if (kevent(kq, &ke, 1, NULL, 0, NULL) != 0)
+		_exit(2);
+
 	while (successes < 5) {
 		SYNC_W(1, go);
 		SYNC_R(1, go2);
+
+		/* Ensure data is available to read */
+		if (kevent(kq, NULL, 0, &event, 1, NULL) != 1)
+			_exit(3);
+
 		fstat(desc[0], &status);
 		error = read(desc[0], &buffer2, sizeof(buffer2));
 


More information about the svn-src-head mailing list