mirror of
https://github.com/EQEmu/Server.git
synced 2026-09-05 07:16:37 +00:00
Update libuv
This commit is contained in:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user