Module Name: src
Committed By: pooka
Date: Sun Feb 20 23:45:46 UTC 2011
Modified Files:
src/tests/lib/librumphijack: h_client.c t_asyncio.sh
Log Message:
check that poll on an invalid fd doesn't hang in the dual poll case
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/tests/lib/librumphijack/h_client.c \
src/tests/lib/librumphijack/t_asyncio.sh
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/tests/lib/librumphijack/h_client.c
diff -u src/tests/lib/librumphijack/h_client.c:1.2 src/tests/lib/librumphijack/h_client.c:1.3
--- src/tests/lib/librumphijack/h_client.c:1.2 Sat Feb 12 10:28:08 2011
+++ src/tests/lib/librumphijack/h_client.c Sun Feb 20 23:45:46 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: h_client.c,v 1.2 2011/02/12 10:28:08 pooka Exp $ */
+/* $NetBSD: h_client.c,v 1.3 2011/02/20 23:45:46 pooka Exp $ */
/*
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -28,10 +28,12 @@
*/
#include <sys/types.h>
+#include <sys/poll.h>
#include <sys/select.h>
#include <err.h>
#include <errno.h>
+#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -88,6 +90,26 @@
errx(1, "select2 succesful");
exit(0);
+ } else if (strcmp(argv[1], "invafd") == 0) {
+ struct pollfd pfd[2];
+ int fd;
+
+ fd = open("/rump/dev/null", O_RDWR);
+ if (fd == -1)
+ err(1, "open");
+ close(fd);
+
+ pfd[0].fd = STDIN_FILENO;
+ pfd[0].events = POLLIN;
+ pfd[1].fd = fd;
+ pfd[1].events = POLLIN;
+
+ if (poll(pfd, 2, INFTIM) != 1)
+ errx(1, "poll unexpected rv");
+ if (pfd[1].revents != POLLNVAL || pfd[0].revents != 0)
+ errx(1, "poll unexpected revents");
+
+ exit(0);
} else {
return ENOTSUP;
}
Index: src/tests/lib/librumphijack/t_asyncio.sh
diff -u src/tests/lib/librumphijack/t_asyncio.sh:1.2 src/tests/lib/librumphijack/t_asyncio.sh:1.3
--- src/tests/lib/librumphijack/t_asyncio.sh:1.2 Sat Feb 12 10:28:08 2011
+++ src/tests/lib/librumphijack/t_asyncio.sh Sun Feb 20 23:45:46 2011
@@ -1,4 +1,4 @@
-# $NetBSD: t_asyncio.sh,v 1.2 2011/02/12 10:28:08 pooka Exp $
+# $NetBSD: t_asyncio.sh,v 1.3 2011/02/20 23:45:46 pooka Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -66,8 +66,29 @@
rump.halt
}
+atf_test_case invafd cleanup
+invafd_head()
+{
+ atf_set "descr" "poll on invalid rump fd"
+ atf_set "timeout" "4"
+}
+
+invafd_body()
+{
+
+ atf_check -s exit:0 rump_server -lrumpvfs ${RUMP_SERVER}
+ atf_check -s exit:0 env LD_PRELOAD=/usr/lib/librumphijack.so \
+ $(atf_get_srcdir)/h_client invafd
+}
+
+invafd_cleanup()
+{
+ rump.halt
+}
+
atf_init_test_cases()
{
atf_add_test_case select_timeout
atf_add_test_case select_allunset
+ atf_add_test_case invafd
}