summaryrefslogtreecommitdiff
path: root/deps/uv/test/test-poll.c
diff options
context:
space:
mode:
Diffstat (limited to 'deps/uv/test/test-poll.c')
-rw-r--r--deps/uv/test/test-poll.c68
1 files changed, 61 insertions, 7 deletions
diff --git a/deps/uv/test/test-poll.c b/deps/uv/test/test-poll.c
index f3cfe79777..6c1f98b7ef 100644
--- a/deps/uv/test/test-poll.c
+++ b/deps/uv/test/test-poll.c
@@ -31,6 +31,16 @@
#include "uv.h"
#include "task.h"
+#ifdef __linux__
+# include <sys/epoll.h>
+#endif
+
+#ifdef UV_HAVE_KQUEUE
+# include <sys/types.h>
+# include <sys/event.h>
+# include <sys/time.h>
+#endif
+
#define NUM_CLIENTS 5
#define TRANSFER_BYTES (1 << 16)
@@ -72,9 +82,9 @@ static int closed_connections = 0;
static int valid_writable_wakeups = 0;
static int spurious_writable_wakeups = 0;
-#ifndef _AIX
+#if !defined(_AIX) && !defined(__MVS__)
static int disconnects = 0;
-#endif /* !_AIX */
+#endif /* !_AIX && !__MVS__ */
static int got_eagain(void) {
#ifdef _WIN32
@@ -378,7 +388,7 @@ static void connection_poll_cb(uv_poll_t* handle, int status, int events) {
new_events &= ~UV_WRITABLE;
}
}
-#ifndef _AIX
+#if !defined(_AIX) && !defined(__MVS__)
if (events & UV_DISCONNECT) {
context->got_disconnect = 1;
++disconnects;
@@ -386,9 +396,9 @@ static void connection_poll_cb(uv_poll_t* handle, int status, int events) {
}
if (context->got_fin && context->sent_fin && context->got_disconnect) {
-#else /* _AIX */
+#else /* _AIX && __MVS__ */
if (context->got_fin && context->sent_fin) {
-#endif /* !_AIx */
+#endif /* !_AIX && !__MVS__ */
/* Sent and received FIN. Close and destroy context. */
close_socket(context->sock);
destroy_connection_context(context);
@@ -556,7 +566,7 @@ static void start_poll_test(void) {
spurious_writable_wakeups > 20);
ASSERT(closed_connections == NUM_CLIENTS * 2);
-#ifndef _AIX
+#if !defined(_AIX) && !defined(__MVS__)
ASSERT(disconnects == NUM_CLIENTS * 2);
#endif
MAKE_VALGRIND_HAPPY();
@@ -584,7 +594,7 @@ TEST_IMPL(poll_unidirectional) {
*/
TEST_IMPL(poll_bad_fdtype) {
#if !defined(__DragonFly__) && !defined(__FreeBSD__) && !defined(__sun) && \
- !defined(_AIX)
+ !defined(_AIX) && !defined(__MVS__) && !defined(__FreeBSD_kernel__)
uv_poll_t poll_handle;
int fd;
@@ -601,3 +611,47 @@ TEST_IMPL(poll_bad_fdtype) {
MAKE_VALGRIND_HAPPY();
return 0;
}
+
+
+#ifdef __linux__
+TEST_IMPL(poll_nested_epoll) {
+ uv_poll_t poll_handle;
+ int fd;
+
+ fd = epoll_create(1);
+ ASSERT(fd != -1);
+
+ ASSERT(0 == uv_poll_init(uv_default_loop(), &poll_handle, fd));
+ ASSERT(0 == uv_poll_start(&poll_handle, UV_READABLE, (uv_poll_cb) abort));
+ ASSERT(0 != uv_run(uv_default_loop(), UV_RUN_NOWAIT));
+
+ uv_close((uv_handle_t*) &poll_handle, NULL);
+ ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
+ ASSERT(0 == close(fd));
+
+ MAKE_VALGRIND_HAPPY();
+ return 0;
+}
+#endif /* __linux__ */
+
+
+#ifdef UV_HAVE_KQUEUE
+TEST_IMPL(poll_nested_kqueue) {
+ uv_poll_t poll_handle;
+ int fd;
+
+ fd = kqueue();
+ ASSERT(fd != -1);
+
+ ASSERT(0 == uv_poll_init(uv_default_loop(), &poll_handle, fd));
+ ASSERT(0 == uv_poll_start(&poll_handle, UV_READABLE, (uv_poll_cb) abort));
+ ASSERT(0 != uv_run(uv_default_loop(), UV_RUN_NOWAIT));
+
+ uv_close((uv_handle_t*) &poll_handle, NULL);
+ ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
+ ASSERT(0 == close(fd));
+
+ MAKE_VALGRIND_HAPPY();
+ return 0;
+}
+#endif /* UV_HAVE_KQUEUE */