summaryrefslogtreecommitdiffstats
path: root/tests/sys
diff options
context:
space:
mode:
authorngie <ngie@FreeBSD.org>2016-12-07 00:57:15 +0000
committerngie <ngie@FreeBSD.org>2016-12-07 00:57:15 +0000
commitd88fa3251f57cccb4c1f730d7cb057986ba2307c (patch)
tree34fdfd432a6a238e24b4e279e92c38b9ab2ea388 /tests/sys
parent02a6052b3f42f24b9015e26ef196c33cdaf56719 (diff)
downloadFreeBSD-src-d88fa3251f57cccb4c1f730d7cb057986ba2307c.zip
FreeBSD-src-d88fa3251f57cccb4c1f730d7cb057986ba2307c.tar.gz
MFstable/11 r309661:
MFC r306962: r306962 (by br): Ensure data in pipe is available to read. Useful for latest (5th, direct mode) test only.
Diffstat (limited to 'tests/sys')
-rw-r--r--tests/sys/kern/pipe/pipe_fstat_bug_test.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/sys/kern/pipe/pipe_fstat_bug_test.c b/tests/sys/kern/pipe/pipe_fstat_bug_test.c
index ae0b309..89060a2 100644
--- a/tests/sys/kern/pipe/pipe_fstat_bug_test.c
+++ b/tests/sys/kern/pipe/pipe_fstat_bug_test.c
@@ -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));
OpenPOWER on IntegriCloud