summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorngie <ngie@FreeBSD.org>2016-12-07 00:55:36 +0000
committerngie <ngie@FreeBSD.org>2016-12-07 00:55:36 +0000
commitd2a105113f17e2b1ed40bc82f595725e238f295a (patch)
tree0e0f1eeb3e699b4c0d634abd3ee018f39e207624 /tests
parentf836007bd73e9e537d2aa37f997452952dc86d84 (diff)
downloadFreeBSD-src-d2a105113f17e2b1ed40bc82f595725e238f295a.zip
FreeBSD-src-d2a105113f17e2b1ed40bc82f595725e238f295a.tar.gz
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')
-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