unix: multiplicity

This commit is contained in:
Ryan Dahl 2011-08-31 04:18:29 +02:00 committed by Bert Belder
parent 0ba44cfd4e
commit 56dcaf9b06
38 changed files with 640 additions and 565 deletions

View File

@ -195,7 +195,7 @@ enum
enum enum
{ {
EIO_MCL_CURRENT = 1, EIO_MCL_CURRENT = 1,
EIO_MCL_FUTURE = 2, EIO_MCL_FUTURE = 2
}; };
/* request priorities */ /* request priorities */
@ -203,7 +203,7 @@ enum
enum { enum {
EIO_PRI_MIN = -4, EIO_PRI_MIN = -4,
EIO_PRI_MAX = 4, EIO_PRI_MAX = 4,
EIO_PRI_DEFAULT = 0, EIO_PRI_DEFAULT = 0
}; };
/* eio request structure */ /* eio request structure */

View File

@ -42,6 +42,16 @@ typedef struct {
typedef int uv_file; typedef int uv_file;
#define UV_LOOP_PRIVATE_FIELDS \
ares_channel channel; \
/* \
* While the channel is active this timer is called once per second to be \
* sure that we're always calling ares_process. See the warning above the \
* definition of ares_timeout(). \
*/ \
ev_timer timer; \
struct ev_loop* ev;
#define UV_REQ_BUFSML_SIZE (4) #define UV_REQ_BUFSML_SIZE (4)
#define UV_REQ_PRIVATE_FIELDS /* empty */ #define UV_REQ_PRIVATE_FIELDS /* empty */

View File

@ -19,7 +19,7 @@
* IN THE SOFTWARE. * IN THE SOFTWARE.
*/ */
/* See uv_init for an introduction. */ /* See uv_loop_new for an introduction. */
#ifndef UV_H #ifndef UV_H
#define UV_H #define UV_H
@ -41,6 +41,8 @@ extern "C" {
typedef intptr_t ssize_t; typedef intptr_t ssize_t;
#endif #endif
typedef struct uv_loop_s uv_loop_t;
typedef struct uv_ares_task_s uv_ares_task_t;
typedef struct uv_err_s uv_err_t; typedef struct uv_err_s uv_err_t;
typedef struct uv_handle_s uv_handle_t; typedef struct uv_handle_s uv_handle_t;
typedef struct uv_stream_s uv_stream_t; typedef struct uv_stream_s uv_stream_t;
@ -54,6 +56,7 @@ typedef struct uv_idle_s uv_idle_t;
typedef struct uv_async_s uv_async_t; typedef struct uv_async_s uv_async_t;
typedef struct uv_getaddrinfo_s uv_getaddrinfo_t; typedef struct uv_getaddrinfo_s uv_getaddrinfo_t;
typedef struct uv_process_s uv_process_t; typedef struct uv_process_s uv_process_t;
typedef struct uv_counters_s uv_counters_t;
/* Request types */ /* Request types */
typedef struct uv_req_s uv_req_t; typedef struct uv_req_s uv_req_t;
typedef struct uv_shutdown_s uv_shutdown_t; typedef struct uv_shutdown_s uv_shutdown_t;
@ -73,32 +76,35 @@ typedef struct uv_work_s uv_work_t;
/* /*
* This function must be called before any other functions in libuv. * This function must be called before any other functions in libuv.
* *
* At the moment libuv is single threaded but this will likely change in the
* near future. Basically it will change by uv_init() taking a 'loop'
* argument and all other _init having a first argument as the the 'loop'.
*
* All functions besides uv_run() are non-blocking. * All functions besides uv_run() are non-blocking.
* *
* All callbacks in libuv are made asynchronously. That is they are never * All callbacks in libuv are made asynchronously. That is they are never
* made by the function that takes them as a parameter. * made by the function that takes them as a parameter.
*/ */
void uv_init(); uv_loop_t* uv_loop_new();
void uv_loop_delete(uv_loop_t*);
/*
* Returns the default loop.
*/
uv_loop_t* uv_default_loop();
/* /*
* This function starts the event loop. It blocks until the reference count * This function starts the event loop. It blocks until the reference count
* of the loop drops to zero. * of the loop drops to zero.
*/ */
int uv_run(); int uv_run(uv_loop_t*);
/* /*
* Manually modify the event loop's reference count. Useful if the user wants * Manually modify the event loop's reference count. Useful if the user wants
* to have a handle or timeout that doesn't keep the loop alive. * to have a handle or timeout that doesn't keep the loop alive.
*/ */
void uv_ref(); void uv_ref(uv_loop_t*);
void uv_unref(); void uv_unref(uv_loop_t*);
void uv_update_time(); void uv_update_time(uv_loop_t*);
int64_t uv_now(); int64_t uv_now(uv_loop_t*);
/* /*
@ -223,13 +229,14 @@ struct uv_err_s {
* On error the user should then call uv_last_error() to determine * On error the user should then call uv_last_error() to determine
* the error code. * the error code.
*/ */
uv_err_t uv_last_error(); uv_err_t uv_last_error(uv_loop_t*);
char* uv_strerror(uv_err_t err); char* uv_strerror(uv_err_t err);
const char* uv_err_name(uv_err_t err); const char* uv_err_name(uv_err_t err);
#define UV_REQ_FIELDS \ #define UV_REQ_FIELDS \
/* read-only */ \ /* read-only */ \
uv_loop_t* loop; \
uv_req_type type; \ uv_req_type type; \
/* public */ \ /* public */ \
void* data; \ void* data; \
@ -266,6 +273,7 @@ struct uv_shutdown_s {
#define UV_HANDLE_FIELDS \ #define UV_HANDLE_FIELDS \
/* read-only */ \ /* read-only */ \
uv_loop_t* loop; \
uv_handle_type type; \ uv_handle_type type; \
/* public */ \ /* public */ \
uv_close_cb close_cb; \ uv_close_cb close_cb; \
@ -358,7 +366,7 @@ typedef enum {
UV_STDERR UV_STDERR
} uv_std_type; } uv_std_type;
uv_stream_t* uv_std_handle(uv_std_type type); uv_stream_t* uv_std_handle(uv_loop_t*, uv_std_type type);
/* /*
* Write data to stream. Buffers are written in order. Example: * Write data to stream. Buffers are written in order. Example:
@ -402,7 +410,7 @@ struct uv_tcp_s {
UV_TCP_PRIVATE_FIELDS UV_TCP_PRIVATE_FIELDS
}; };
int uv_tcp_init(uv_tcp_t* handle); int uv_tcp_init(uv_loop_t*, uv_tcp_t* handle);
int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in); int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in);
int uv_tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6); int uv_tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6);
@ -485,7 +493,7 @@ struct uv_udp_send_s {
* Initialize a new UDP handle. The actual socket is created lazily. * Initialize a new UDP handle. The actual socket is created lazily.
* Returns 0 on success. * Returns 0 on success.
*/ */
int uv_udp_init(uv_udp_t* handle); int uv_udp_init(uv_loop_t*, uv_udp_t* handle);
/* /*
* Bind to a IPv4 address and port. * Bind to a IPv4 address and port.
@ -590,7 +598,7 @@ struct uv_pipe_s {
UV_PIPE_PRIVATE_FIELDS UV_PIPE_PRIVATE_FIELDS
}; };
int uv_pipe_init(uv_pipe_t* handle); int uv_pipe_init(uv_loop_t*, uv_pipe_t* handle);
int uv_pipe_bind(uv_pipe_t* handle, const char* name); int uv_pipe_bind(uv_pipe_t* handle, const char* name);
@ -610,7 +618,7 @@ struct uv_prepare_s {
UV_PREPARE_PRIVATE_FIELDS UV_PREPARE_PRIVATE_FIELDS
}; };
int uv_prepare_init(uv_prepare_t* prepare); int uv_prepare_init(uv_loop_t*, uv_prepare_t* prepare);
int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb); int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb);
@ -628,7 +636,7 @@ struct uv_check_s {
UV_CHECK_PRIVATE_FIELDS UV_CHECK_PRIVATE_FIELDS
}; };
int uv_check_init(uv_check_t* check); int uv_check_init(uv_loop_t*, uv_check_t* check);
int uv_check_start(uv_check_t* check, uv_check_cb cb); int uv_check_start(uv_check_t* check, uv_check_cb cb);
@ -648,7 +656,7 @@ struct uv_idle_s {
UV_IDLE_PRIVATE_FIELDS UV_IDLE_PRIVATE_FIELDS
}; };
int uv_idle_init(uv_idle_t* idle); int uv_idle_init(uv_loop_t*, uv_idle_t* idle);
int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb); int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb);
@ -670,7 +678,7 @@ struct uv_async_s {
UV_ASYNC_PRIVATE_FIELDS UV_ASYNC_PRIVATE_FIELDS
}; };
int uv_async_init(uv_async_t* async, uv_async_cb async_cb); int uv_async_init(uv_loop_t*, uv_async_t* async, uv_async_cb async_cb);
/* /*
* This can be called from other threads to wake up a libuv thread. * This can be called from other threads to wake up a libuv thread.
@ -691,7 +699,7 @@ struct uv_timer_s {
UV_TIMER_PRIVATE_FIELDS UV_TIMER_PRIVATE_FIELDS
}; };
int uv_timer_init(uv_timer_t* timer); int uv_timer_init(uv_loop_t*, uv_timer_t* timer);
int uv_timer_start(uv_timer_t* timer, uv_timer_cb cb, int64_t timeout, int uv_timer_start(uv_timer_t* timer, uv_timer_cb cb, int64_t timeout,
int64_t repeat); int64_t repeat);
@ -717,11 +725,13 @@ int64_t uv_timer_get_repeat(uv_timer_t* timer);
/* c-ares integration initialize and terminate */ /* c-ares integration initialize and terminate */
int uv_ares_init_options(ares_channel *channelptr, int uv_ares_init_options(uv_loop_t*,
ares_channel *channelptr,
struct ares_options *options, struct ares_options *options,
int optmask); int optmask);
void uv_ares_destroy(ares_channel channel); /* TODO remove the loop argument from this function? */
void uv_ares_destroy(uv_loop_t*, ares_channel channel);
/* /*
@ -745,7 +755,8 @@ struct uv_getaddrinfo_s {
* Input arguments may be released after return from this call. Callback * Input arguments may be released after return from this call. Callback
* must not call freeaddrinfo. * must not call freeaddrinfo.
*/ */
int uv_getaddrinfo(uv_getaddrinfo_t* handle, int uv_getaddrinfo(uv_loop_t*,
uv_getaddrinfo_t* handle,
uv_getaddrinfo_cb getaddrinfo_cb, uv_getaddrinfo_cb getaddrinfo_cb,
const char* node, const char* node,
const char* service, const char* service,
@ -799,7 +810,7 @@ struct uv_process_s {
}; };
/* Initializes uv_process_t and starts the process. */ /* Initializes uv_process_t and starts the process. */
int uv_spawn(uv_process_t*, uv_process_options_t options); int uv_spawn(uv_loop_t*, uv_process_t*, uv_process_options_t options);
/* /*
* Kills the process with the specified signal. The user must still * Kills the process with the specified signal. The user must still
@ -941,8 +952,8 @@ union uv_any_req {
}; };
/* Diagnostic counters */ struct uv_counters_s {
typedef struct { uint64_t eio_init;
uint64_t req_init; uint64_t req_init;
uint64_t handle_init; uint64_t handle_init;
uint64_t stream_init; uint64_t stream_init;
@ -955,9 +966,24 @@ typedef struct {
uint64_t async_init; uint64_t async_init;
uint64_t timer_init; uint64_t timer_init;
uint64_t process_init; uint64_t process_init;
} uv_counters_t; };
uv_counters_t* uv_counters();
struct uv_loop_s {
UV_LOOP_PRIVATE_FIELDS
/* list used for ares task handles */
uv_ares_task_t* uv_ares_handles_;
/* Various thing for libeio. */
uv_async_t uv_eio_want_poll_notifier;
uv_async_t uv_eio_done_poll_notifier;
uv_idle_t uv_eio_poller;
/* Diagnostic counters */
uv_counters_t counters;
/* The last error */
uv_err_t last_err;
/* User data - use this for whatever. */
void* data;
};
/* Don't export the private CPP symbols. */ /* Don't export the private CPP symbols. */

View File

@ -31,9 +31,6 @@
#include "ares/inet_net_pton.h" #include "ares/inet_net_pton.h"
#include "ares/inet_ntop.h" #include "ares/inet_ntop.h"
/* list used for ares task handles */
static uv_ares_task_t* uv_ares_handles_ = NULL;
static uv_counters_t counters; static uv_counters_t counters;
@ -135,20 +132,23 @@ int uv_ip6_name(struct sockaddr_in6* src, char* dst, size_t size) {
/* find matching ares handle in list */ /* find matching ares handle in list */
void uv_add_ares_handle(uv_ares_task_t* handle) { void uv_add_ares_handle(uv_loop_t* loop, uv_ares_task_t* handle) {
handle->ares_next = uv_ares_handles_; handle->loop = loop;
handle->ares_next = loop->uv_ares_handles_;
handle->ares_prev = NULL; handle->ares_prev = NULL;
if (uv_ares_handles_) { if (loop->uv_ares_handles_) {
uv_ares_handles_->ares_prev = handle; loop->uv_ares_handles_->ares_prev = handle;
} }
uv_ares_handles_ = handle;
loop->uv_ares_handles_ = handle;
} }
/* find matching ares handle in list */ /* find matching ares handle in list */
/* TODO: faster lookup */ /* TODO: faster lookup */
uv_ares_task_t* uv_find_ares_handle(ares_socket_t sock) { uv_ares_task_t* uv_find_ares_handle(uv_loop_t* loop, ares_socket_t sock) {
uv_ares_task_t* handle = uv_ares_handles_; uv_ares_task_t* handle = loop->uv_ares_handles_;
while (handle != NULL) { while (handle != NULL) {
if (handle->sock == sock) { if (handle->sock == sock) {
break; break;
@ -161,8 +161,10 @@ uv_ares_task_t* uv_find_ares_handle(ares_socket_t sock) {
/* remove ares handle in list */ /* remove ares handle in list */
void uv_remove_ares_handle(uv_ares_task_t* handle) { void uv_remove_ares_handle(uv_ares_task_t* handle) {
if (handle == uv_ares_handles_) { uv_loop_t* loop = handle->loop;
uv_ares_handles_ = handle->ares_next;
if (handle == loop->uv_ares_handles_) {
loop->uv_ares_handles_ = handle->ares_next;
} }
if (handle->ares_next) { if (handle->ares_next) {
@ -176,6 +178,6 @@ void uv_remove_ares_handle(uv_ares_task_t* handle) {
/* Returns 1 if the uv_ares_handles_ list is empty. 0 otherwise. */ /* Returns 1 if the uv_ares_handles_ list is empty. 0 otherwise. */
int uv_ares_handles_empty() { int uv_ares_handles_empty(uv_loop_t* loop) {
return uv_ares_handles_ ? 0 : 1; return loop->uv_ares_handles_ ? 0 : 1;
} }

View File

@ -38,11 +38,6 @@
req->errorno = errno; \ req->errorno = errno; \
} }
/*
* Subclass of uv_handle_t. Used for integration of c-ares.
*/
typedef struct uv_ares_task_s uv_ares_task_t;
struct uv_ares_task_s { struct uv_ares_task_s {
UV_HANDLE_FIELDS UV_HANDLE_FIELDS
UV_ARES_TASK_PRIVATE_FIELDS UV_ARES_TASK_PRIVATE_FIELDS
@ -52,9 +47,12 @@ struct uv_ares_task_s {
void uv_remove_ares_handle(uv_ares_task_t* handle); void uv_remove_ares_handle(uv_ares_task_t* handle);
uv_ares_task_t* uv_find_ares_handle(ares_socket_t sock); uv_ares_task_t* uv_find_ares_handle(uv_loop_t*, ares_socket_t sock);
void uv_add_ares_handle(uv_ares_task_t* handle);
int uv_ares_handles_empty(); /* TODO Rename to uv_ares_task_init? */
void uv_add_ares_handle(uv_loop_t* loop, uv_ares_task_t* handle);
int uv_ares_handles_empty(uv_loop_t* loop);
#endif /* UV_COMMON_H_ */ #endif /* UV_COMMON_H_ */

View File

@ -25,48 +25,46 @@
#include <assert.h> #include <assert.h>
static uv_async_t uv_eio_want_poll_notifier;
static uv_async_t uv_eio_done_poll_notifier;
static uv_idle_t uv_eio_poller;
static int uv_eio_init_count;
static void uv_eio_do_poll(uv_idle_t* watcher, int status) { static void uv_eio_do_poll(uv_idle_t* watcher, int status) {
assert(watcher == &uv_eio_poller); assert(watcher == &(watcher->loop->uv_eio_poller));
/* printf("uv_eio_poller\n"); */ /* printf("uv_eio_poller\n"); */
if (eio_poll() != -1 && uv_is_active((uv_handle_t*) &uv_eio_poller)) { if (eio_poll() != -1 && uv_is_active((uv_handle_t*) watcher)) {
/* printf("uv_eio_poller stop\n"); */ /* printf("uv_eio_poller stop\n"); */
uv_idle_stop(&uv_eio_poller); uv_idle_stop(watcher);
uv_unref(); uv_unref(watcher->loop);
} }
} }
/* Called from the main thread. */ /* Called from the main thread. */
static void uv_eio_want_poll_notifier_cb(uv_async_t* watcher, int status) { static void uv_eio_want_poll_notifier_cb(uv_async_t* watcher, int status) {
assert(watcher == &uv_eio_want_poll_notifier); uv_loop_t* loop = watcher->loop;
assert(watcher == &loop->uv_eio_want_poll_notifier);
/* printf("want poll notifier\n"); */ /* printf("want poll notifier\n"); */
if (eio_poll() == -1 && !uv_is_active((uv_handle_t*) &uv_eio_poller)) { if (eio_poll() == -1 && !uv_is_active((uv_handle_t*) &loop->uv_eio_poller)) {
/* printf("uv_eio_poller start\n"); */ /* printf("uv_eio_poller start\n"); */
uv_idle_start(&uv_eio_poller, uv_eio_do_poll); uv_idle_start(&loop->uv_eio_poller, uv_eio_do_poll);
uv_ref(); uv_ref(loop);
} }
} }
static void uv_eio_done_poll_notifier_cb(uv_async_t* watcher, int revents) { static void uv_eio_done_poll_notifier_cb(uv_async_t* watcher, int revents) {
assert(watcher == &uv_eio_done_poll_notifier); uv_loop_t* loop = watcher->loop;
assert(watcher == &loop->uv_eio_done_poll_notifier);
/* printf("done poll notifier\n"); */ /* printf("done poll notifier\n"); */
if (eio_poll() != -1 && uv_is_active((uv_handle_t*) &uv_eio_poller)) { if (eio_poll() != -1 && uv_is_active((uv_handle_t*) &loop->uv_eio_poller)) {
/* printf("uv_eio_poller stop\n"); */ /* printf("uv_eio_poller stop\n"); */
uv_idle_stop(&uv_eio_poller); uv_idle_stop(&loop->uv_eio_poller);
uv_unref(); uv_unref(loop);
} }
} }
@ -77,7 +75,15 @@ static void uv_eio_done_poll_notifier_cb(uv_async_t* watcher, int revents) {
*/ */
static void uv_eio_want_poll(void) { static void uv_eio_want_poll(void) {
/* Signal the main thread that eio_poll need to be processed. */ /* Signal the main thread that eio_poll need to be processed. */
#if 0
/*
* TODO need to select the correct uv_loop_t and async_send to
* uv_eio_want_poll_notifier.
*/
uv_async_send(&uv_eio_want_poll_notifier); uv_async_send(&uv_eio_want_poll_notifier);
#endif
} }
@ -86,22 +92,27 @@ static void uv_eio_done_poll(void) {
* Signal the main thread that we should stop calling eio_poll(). * Signal the main thread that we should stop calling eio_poll().
* from the idle watcher. * from the idle watcher.
*/ */
#if 0
uv_async_send(&uv_eio_done_poll_notifier); uv_async_send(&uv_eio_done_poll_notifier);
#endif
} }
void uv_eio_init() { void uv_eio_init(uv_loop_t* loop) {
if (uv_eio_init_count == 0) { if (loop->counters.eio_init == 0) {
uv_eio_init_count++; loop->counters.eio_init++;
uv_idle_init(&uv_eio_poller); uv_idle_init(loop, &loop->uv_eio_poller);
uv_idle_start(&uv_eio_poller, uv_eio_do_poll); uv_idle_start(&loop->uv_eio_poller, uv_eio_do_poll);
uv_async_init(&uv_eio_want_poll_notifier, uv_eio_want_poll_notifier_cb); uv_async_init(loop, &loop->uv_eio_want_poll_notifier,
uv_unref(); uv_eio_want_poll_notifier_cb);
uv_unref(loop);
uv_async_init(&uv_eio_done_poll_notifier, uv_eio_done_poll_notifier_cb); uv_async_init(loop, &loop->uv_eio_done_poll_notifier,
uv_unref(); uv_eio_done_poll_notifier_cb);
uv_unref(loop);
eio_init(uv_eio_want_poll, uv_eio_done_poll); eio_init(uv_eio_want_poll, uv_eio_done_poll);
/* /*

View File

@ -9,5 +9,5 @@
* safe to call more than once. * safe to call more than once.
* TODO: uv_eio_deinit * TODO: uv_eio_deinit
*/ */
void uv_eio_init(void); void uv_eio_init(uv_loop_t*);
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -84,7 +84,7 @@ BENCHMARK_IMPL(gethostbyname) {
return 1; return 1;
} }
uv_init();
ares_callbacks = 0; ares_callbacks = 0;
ares_errors = 0; ares_errors = 0;

View File

@ -66,7 +66,7 @@ static void getaddrinfo_initiate(uv_getaddrinfo_t* handle) {
BENCHMARK_IMPL(getaddrinfo) { BENCHMARK_IMPL(getaddrinfo) {
int i; int i;
uv_init();
uv_update_time(); uv_update_time();
start_time = uv_now(); start_time = uv_now();

View File

@ -198,7 +198,7 @@ static void pinger_new() {
BENCHMARK_IMPL(ping_pongs) { BENCHMARK_IMPL(ping_pongs) {
uv_init();
start_time = uv_now(); start_time = uv_now();
pinger_new(); pinger_new();

View File

@ -275,7 +275,7 @@ static int pound_it(int concurrency,
uint64_t start_time; /* in ns */ uint64_t start_time; /* in ns */
uint64_t end_time; uint64_t end_time;
uv_init();
uv_update_time(); uv_update_time();
start = uv_now(); start = uv_now();

View File

@ -366,7 +366,7 @@ HELPER_IMPL(tcp_pump_server) {
int r; int r;
type = TCP; type = TCP;
uv_init();
listen_addr = uv_ip4_addr("0.0.0.0", TEST_PORT); listen_addr = uv_ip4_addr("0.0.0.0", TEST_PORT);
/* Server */ /* Server */
@ -388,7 +388,7 @@ HELPER_IMPL(pipe_pump_server) {
int r; int r;
type = PIPE; type = PIPE;
uv_init();
/* Server */ /* Server */
server = (uv_stream_t*)&pipeServer; server = (uv_stream_t*)&pipeServer;
@ -410,7 +410,7 @@ void tcp_pump(int n) {
TARGET_CONNECTIONS = n; TARGET_CONNECTIONS = n;
type = TCP; type = TCP;
uv_init();
connect_addr = uv_ip4_addr("127.0.0.1", TEST_PORT); connect_addr = uv_ip4_addr("127.0.0.1", TEST_PORT);
@ -426,7 +426,7 @@ void pipe_pump(int n) {
TARGET_CONNECTIONS = n; TARGET_CONNECTIONS = n;
type = PIPE; type = PIPE;
uv_init();
/* Start making connections */ /* Start making connections */
maybe_connect_some(); maybe_connect_some();

View File

@ -130,7 +130,7 @@ BENCHMARK_IMPL(spawn) {
int r; int r;
static int64_t start_time, end_time; static int64_t start_time, end_time;
uv_init();
r = uv_exepath(exepath, &exepath_size); r = uv_exepath(exepath, &exepath_size);
ASSERT(r == 0); ASSERT(r == 0);

View File

@ -314,7 +314,7 @@ static int dns_start(int port) {
HELPER_IMPL(dns_server) { HELPER_IMPL(dns_server) {
uv_init();
if (dns_start(TEST_PORT_2)) if (dns_start(TEST_PORT_2))
return 1; return 1;

View File

@ -46,7 +46,7 @@ static void after_write(uv_write_t* req, int status) {
write_req_t* wr; write_req_t* wr;
if (status) { if (status) {
uv_err_t err = uv_last_error(); uv_err_t err = uv_last_error(uv_default_loop());
fprintf(stderr, "uv_write error: %s\n", uv_strerror(err)); fprintf(stderr, "uv_write error: %s\n", uv_strerror(err));
ASSERT(0); ASSERT(0);
} }
@ -72,7 +72,7 @@ static void after_read(uv_stream_t* handle, ssize_t nread, uv_buf_t buf) {
if (nread < 0) { if (nread < 0) {
/* Error or EOF */ /* Error or EOF */
ASSERT (uv_last_error().code == UV_EOF); ASSERT (uv_last_error(uv_default_loop()).code == UV_EOF);
if (buf.base) { if (buf.base) {
free(buf.base); free(buf.base);
@ -133,7 +133,8 @@ static void on_connection(uv_stream_t* server, int status) {
int r; int r;
if (status != 0) { if (status != 0) {
fprintf(stderr, "Connect error %d\n", uv_last_error().code); fprintf(stderr, "Connect error %d\n",
uv_last_error(uv_default_loop()).code);
} }
ASSERT(status == 0); ASSERT(status == 0);
@ -141,13 +142,13 @@ static void on_connection(uv_stream_t* server, int status) {
case TCP: case TCP:
stream = malloc(sizeof(uv_tcp_t)); stream = malloc(sizeof(uv_tcp_t));
ASSERT(stream != NULL); ASSERT(stream != NULL);
uv_tcp_init((uv_tcp_t*)stream); uv_tcp_init(uv_default_loop(), (uv_tcp_t*)stream);
break; break;
case PIPE: case PIPE:
stream = malloc(sizeof(uv_pipe_t)); stream = malloc(sizeof(uv_pipe_t));
ASSERT(stream != NULL); ASSERT(stream != NULL);
uv_pipe_init((uv_pipe_t*)stream); uv_pipe_init(uv_default_loop(), (uv_pipe_t*)stream);
break; break;
default: default:
@ -178,7 +179,7 @@ static int tcp4_echo_start(int port) {
server = (uv_handle_t*)&tcpServer; server = (uv_handle_t*)&tcpServer;
serverType = TCP; serverType = TCP;
r = uv_tcp_init(&tcpServer); r = uv_tcp_init(uv_default_loop(), &tcpServer);
if (r) { if (r) {
/* TODO: Error codes */ /* TODO: Error codes */
fprintf(stderr, "Socket creation error\n"); fprintf(stderr, "Socket creation error\n");
@ -195,7 +196,8 @@ static int tcp4_echo_start(int port) {
r = uv_listen((uv_stream_t*)&tcpServer, SOMAXCONN, on_connection); r = uv_listen((uv_stream_t*)&tcpServer, SOMAXCONN, on_connection);
if (r) { if (r) {
/* TODO: Error codes */ /* TODO: Error codes */
fprintf(stderr, "Listen error %s\n", uv_err_name(uv_last_error())); fprintf(stderr, "Listen error %s\n",
uv_err_name(uv_last_error(uv_default_loop())));
return 1; return 1;
} }
@ -210,7 +212,7 @@ static int tcp6_echo_start(int port) {
server = (uv_handle_t*)&tcpServer; server = (uv_handle_t*)&tcpServer;
serverType = TCP; serverType = TCP;
r = uv_tcp_init(&tcpServer); r = uv_tcp_init(uv_default_loop(), &tcpServer);
if (r) { if (r) {
/* TODO: Error codes */ /* TODO: Error codes */
fprintf(stderr, "Socket creation error\n"); fprintf(stderr, "Socket creation error\n");
@ -242,21 +244,24 @@ static int pipe_echo_start(char* pipeName) {
server = (uv_handle_t*)&pipeServer; server = (uv_handle_t*)&pipeServer;
serverType = PIPE; serverType = PIPE;
r = uv_pipe_init(&pipeServer); r = uv_pipe_init(uv_default_loop(), &pipeServer);
if (r) { if (r) {
fprintf(stderr, "uv_pipe_init: %s\n", uv_strerror(uv_last_error())); fprintf(stderr, "uv_pipe_init: %s\n",
uv_strerror(uv_last_error(uv_default_loop())));
return 1; return 1;
} }
r = uv_pipe_bind(&pipeServer, pipeName); r = uv_pipe_bind(&pipeServer, pipeName);
if (r) { if (r) {
fprintf(stderr, "uv_pipe_bind: %s\n", uv_strerror(uv_last_error())); fprintf(stderr, "uv_pipe_bind: %s\n",
uv_strerror(uv_last_error(uv_default_loop())));
return 1; return 1;
} }
r = uv_listen((uv_stream_t*)&pipeServer, SOMAXCONN, on_connection); r = uv_listen((uv_stream_t*)&pipeServer, SOMAXCONN, on_connection);
if (r) { if (r) {
fprintf(stderr, "uv_pipe_listen: %s\n", uv_strerror(uv_last_error())); fprintf(stderr, "uv_pipe_listen: %s\n",
uv_strerror(uv_last_error(uv_default_loop())));
return 1; return 1;
} }
@ -265,31 +270,33 @@ static int pipe_echo_start(char* pipeName) {
HELPER_IMPL(tcp4_echo_server) { HELPER_IMPL(tcp4_echo_server) {
uv_init(); uv_loop_t* loop = uv_default_loop();
if (tcp4_echo_start(TEST_PORT)) if (tcp4_echo_start(TEST_PORT))
return 1; return 1;
uv_run(); uv_run(loop);
return 0; return 0;
} }
HELPER_IMPL(tcp6_echo_server) { HELPER_IMPL(tcp6_echo_server) {
uv_init(); uv_loop_t* loop = uv_default_loop();
if (tcp6_echo_start(TEST_PORT)) if (tcp6_echo_start(TEST_PORT))
return 1; return 1;
uv_run(); uv_run(loop);
return 0; return 0;
} }
HELPER_IMPL(pipe_echo_server) { HELPER_IMPL(pipe_echo_server) {
uv_init(); uv_loop_t* loop = uv_default_loop();
if (pipe_echo_start(TEST_PIPENAME)) if (pipe_echo_start(TEST_PIPENAME))
return 1; return 1;
uv_run(); uv_run(loop);
return 0; return 0;
} }

View File

@ -182,14 +182,12 @@ static void prepare_cb(uv_prepare_t* handle, int status) {
TEST_IMPL(async) { TEST_IMPL(async) {
int r; int r;
uv_init(); r = uv_prepare_init(uv_default_loop(), &prepare_handle);
r = uv_prepare_init(&prepare_handle);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_prepare_start(&prepare_handle, prepare_cb); r = uv_prepare_start(&prepare_handle, prepare_cb);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_async_init(&async1_handle, async1_cb); r = uv_async_init(uv_default_loop(), &async1_handle, async1_cb);
ASSERT(r == 0); ASSERT(r == 0);
#if 0 #if 0
@ -197,7 +195,7 @@ TEST_IMPL(async) {
ASSERT(r == 0); ASSERT(r == 0);
#endif #endif
r = uv_run(); r = uv_run(uv_default_loop());
ASSERT(r == 0); ASSERT(r == 0);
r = uv_wait_thread(thread1_id); r = uv_wait_thread(thread1_id);

View File

@ -76,11 +76,11 @@ static void read_cb(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) {
free(buf.base); free(buf.base);
if (nread == 0) { if (nread == 0) {
ASSERT(uv_last_error().code == UV_EAGAIN); ASSERT(uv_last_error(uv_default_loop()).code == UV_EAGAIN);
return; return;
} else if (nread == -1) { } else if (nread == -1) {
ASSERT(uv_last_error().code == UV_EOF); ASSERT(uv_last_error(uv_default_loop()).code == UV_EOF);
nested++; nested++;
uv_close((uv_handle_t*)tcp, close_cb); uv_close((uv_handle_t*)tcp, close_cb);
@ -140,7 +140,7 @@ static void write_cb(uv_write_t* req, int status) {
/* back to our receive buffer when we start reading. This maximizes the */ /* back to our receive buffer when we start reading. This maximizes the */
/* tempation for the backend to use dirty stack for calling read_cb. */ /* tempation for the backend to use dirty stack for calling read_cb. */
nested++; nested++;
r = uv_timer_init(&timer); r = uv_timer_init(uv_default_loop(), &timer);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_start(&timer, timer_cb, 500, 0); r = uv_timer_start(&timer, timer_cb, 500, 0);
ASSERT(r == 0); ASSERT(r == 0);
@ -176,9 +176,7 @@ static void connect_cb(uv_connect_t* req, int status) {
TEST_IMPL(callback_stack) { TEST_IMPL(callback_stack) {
struct sockaddr_in addr = uv_ip4_addr("127.0.0.1", TEST_PORT); struct sockaddr_in addr = uv_ip4_addr("127.0.0.1", TEST_PORT);
uv_init(); if (uv_tcp_init(uv_default_loop(), &client)) {
if (uv_tcp_init(&client)) {
FATAL("uv_tcp_init failed"); FATAL("uv_tcp_init failed");
} }
@ -191,7 +189,7 @@ TEST_IMPL(callback_stack) {
} }
nested--; nested--;
uv_run(); uv_run(uv_default_loop());
ASSERT(nested == 0); ASSERT(nested == 0);
ASSERT(connect_cb_called == 1 && "connect_cb must be called exactly once"); ASSERT(connect_cb_called == 1 && "connect_cb must be called exactly once");

View File

@ -69,7 +69,7 @@ static void timer_cb(uv_timer_t* handle, int status) {
static void on_connect_with_close(uv_connect_t *req, int status) { static void on_connect_with_close(uv_connect_t *req, int status) {
ASSERT((uv_stream_t*) &tcp == req->handle); ASSERT((uv_stream_t*) &tcp == req->handle);
ASSERT(status == -1); ASSERT(status == -1);
ASSERT(uv_last_error().code == UV_ECONNREFUSED); ASSERT(uv_last_error(uv_default_loop()).code == UV_ECONNREFUSED);
connect_cb_calls++; connect_cb_calls++;
ASSERT(close_cb_calls == 0); ASSERT(close_cb_calls == 0);
@ -79,7 +79,7 @@ static void on_connect_with_close(uv_connect_t *req, int status) {
static void on_connect_without_close(uv_connect_t *req, int status) { static void on_connect_without_close(uv_connect_t *req, int status) {
ASSERT(status == -1); ASSERT(status == -1);
ASSERT(uv_last_error().code == UV_ECONNREFUSED); ASSERT(uv_last_error(uv_default_loop()).code == UV_ECONNREFUSED);
connect_cb_calls++; connect_cb_calls++;
uv_timer_start(&timer, timer_cb, 100, 0); uv_timer_start(&timer, timer_cb, 100, 0);
@ -98,7 +98,7 @@ void connection_fail(uv_connect_cb connect_cb) {
server_addr = uv_ip4_addr("127.0.0.1", TEST_PORT); server_addr = uv_ip4_addr("127.0.0.1", TEST_PORT);
/* Try to connec to the server and do NUM_PINGS ping-pongs. */ /* Try to connec to the server and do NUM_PINGS ping-pongs. */
r = uv_tcp_init(&tcp); r = uv_tcp_init(uv_default_loop(), &tcp);
ASSERT(!r); ASSERT(!r);
/* We are never doing multiple reads/connects at a time anyway. */ /* We are never doing multiple reads/connects at a time anyway. */
@ -107,7 +107,7 @@ void connection_fail(uv_connect_cb connect_cb) {
r = uv_tcp_connect(&req, &tcp, server_addr, connect_cb); r = uv_tcp_connect(&req, &tcp, server_addr, connect_cb);
ASSERT(!r); ASSERT(!r);
uv_run(); uv_run(uv_default_loop());
ASSERT(connect_cb_calls == 1); ASSERT(connect_cb_calls == 1);
ASSERT(close_cb_calls == 1); ASSERT(close_cb_calls == 1);
@ -119,7 +119,7 @@ void connection_fail(uv_connect_cb connect_cb) {
* expect an error. * expect an error.
*/ */
TEST_IMPL(connection_fail) { TEST_IMPL(connection_fail) {
uv_init();
connection_fail(on_connect_with_close); connection_fail(on_connect_with_close);
@ -136,9 +136,9 @@ TEST_IMPL(connection_fail) {
* attempt. * attempt.
*/ */
TEST_IMPL(connection_fail_doesnt_auto_close) { TEST_IMPL(connection_fail_doesnt_auto_close) {
uv_init();
uv_timer_init(&timer);
uv_timer_init(uv_default_loop(), &timer);
connection_fail(on_connect_without_close); connection_fail(on_connect_without_close);

View File

@ -57,16 +57,16 @@ static void do_accept(uv_timer_t* timer_handle, int status) {
ASSERT(status == 0); ASSERT(status == 0);
ASSERT(accepted_handle != NULL); ASSERT(accepted_handle != NULL);
uv_tcp_init(accepted_handle); uv_tcp_init(uv_default_loop(), accepted_handle);
/* Test to that uv_counters()->tcp_init does not increase across the uv_accept. */ /* Test to that uv_default_loop()->counters.tcp_init does not increase across the uv_accept. */
tcpcnt = uv_counters()->tcp_init; tcpcnt = uv_default_loop()->counters.tcp_init;
server = (uv_tcp_t*)timer_handle->data; server = (uv_tcp_t*)timer_handle->data;
r = uv_accept((uv_stream_t*)server, (uv_stream_t*)accepted_handle); r = uv_accept((uv_stream_t*)server, (uv_stream_t*)accepted_handle);
ASSERT(r == 0); ASSERT(r == 0);
ASSERT(uv_counters()->tcp_init == tcpcnt); ASSERT(uv_default_loop()->counters.tcp_init == tcpcnt);
do_accept_called++; do_accept_called++;
@ -93,7 +93,7 @@ static void connection_cb(uv_stream_t* tcp, int status) {
ASSERT(timer_handle != NULL); ASSERT(timer_handle != NULL);
/* Accept the client after 1 second */ /* Accept the client after 1 second */
r = uv_timer_init(timer_handle); r = uv_timer_init(uv_default_loop(), timer_handle);
ASSERT(r == 0); ASSERT(r == 0);
timer_handle->data = tcp; timer_handle->data = tcp;
@ -112,10 +112,10 @@ static void start_server() {
ASSERT(server != NULL); ASSERT(server != NULL);
r = uv_tcp_init(server); r = uv_tcp_init(uv_default_loop(), server);
ASSERT(r == 0); ASSERT(r == 0);
ASSERT(uv_counters()->tcp_init == 1); ASSERT(uv_default_loop()->counters.tcp_init == 1);
ASSERT(uv_counters()->handle_init == 1); ASSERT(uv_default_loop()->counters.handle_init == 1);
r = uv_tcp_bind(server, addr); r = uv_tcp_bind(server, addr);
ASSERT(r == 0); ASSERT(r == 0);
@ -134,11 +134,11 @@ static void read_cb(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) {
if (nread != -1) { if (nread != -1) {
ASSERT(nread == 0); ASSERT(nread == 0);
ASSERT(uv_last_error().code == UV_EAGAIN); ASSERT(uv_last_error(uv_default_loop()).code == UV_EAGAIN);
} else { } else {
ASSERT(tcp != NULL); ASSERT(tcp != NULL);
ASSERT(nread == -1); ASSERT(nread == -1);
ASSERT(uv_last_error().code == UV_EOF); ASSERT(uv_last_error(uv_default_loop()).code == UV_EOF);
uv_close((uv_handle_t*)tcp, close_cb); uv_close((uv_handle_t*)tcp, close_cb);
} }
} }
@ -170,7 +170,7 @@ static void client_connect() {
ASSERT(client != NULL); ASSERT(client != NULL);
ASSERT(connect_req != NULL); ASSERT(connect_req != NULL);
r = uv_tcp_init(client); r = uv_tcp_init(uv_default_loop(), client);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_connect(connect_req, client, addr, connect_cb); r = uv_tcp_connect(connect_req, client, addr, connect_cb);
@ -180,14 +180,14 @@ static void client_connect() {
TEST_IMPL(delayed_accept) { TEST_IMPL(delayed_accept) {
uv_init();
start_server(); start_server();
client_connect(); client_connect();
client_connect(); client_connect();
uv_run(); uv_run(uv_default_loop());
ASSERT(connection_cb_called == 2); ASSERT(connection_cb_called == 2);
ASSERT(do_accept_called == 2); ASSERT(do_accept_called == 2);

View File

@ -67,16 +67,17 @@ static void getaddrinfo_cuncurrent_cb(uv_getaddrinfo_t* handle,
TEST_IMPL(getaddrinfo_basic) { TEST_IMPL(getaddrinfo_basic) {
int r; int r;
uv_init();
r = uv_getaddrinfo(&getaddrinfo_handle,
r = uv_getaddrinfo(uv_default_loop(),
&getaddrinfo_handle,
&getaddrinfo_basic_cb, &getaddrinfo_basic_cb,
name, name,
NULL, NULL,
NULL); NULL);
ASSERT(r == 0); ASSERT(r == 0);
uv_run(); uv_run(uv_default_loop());
ASSERT(getaddrinfo_cbs == 1); ASSERT(getaddrinfo_cbs == 1);
@ -87,12 +88,13 @@ TEST_IMPL(getaddrinfo_basic) {
TEST_IMPL(getaddrinfo_concurrent) { TEST_IMPL(getaddrinfo_concurrent) {
int i, r; int i, r;
uv_init();
for (i = 0; i < CONCURRENT_COUNT; i++) { for (i = 0; i < CONCURRENT_COUNT; i++) {
callback_counts[i] = 0; callback_counts[i] = 0;
r = uv_getaddrinfo(&getaddrinfo_handles[i], r = uv_getaddrinfo(uv_default_loop(),
&getaddrinfo_handles[i],
&getaddrinfo_cuncurrent_cb, &getaddrinfo_cuncurrent_cb,
name, name,
NULL, NULL,
@ -100,7 +102,7 @@ TEST_IMPL(getaddrinfo_concurrent) {
ASSERT(r == 0); ASSERT(r == 0);
} }
uv_run(); uv_run(uv_default_loop());
for (i = 0; i < CONCURRENT_COUNT; i++) { for (i = 0; i < CONCURRENT_COUNT; i++) {
ASSERT(callback_counts[i] == 1); ASSERT(callback_counts[i] == 1);

View File

@ -74,7 +74,7 @@ static void prep_tcploopback() {
options.tcp_port = htons(TEST_PORT); options.tcp_port = htons(TEST_PORT);
options.flags = ARES_FLAG_USEVC; options.flags = ARES_FLAG_USEVC;
rc = uv_ares_init_options(&channel, &options, optmask); rc = uv_ares_init_options(uv_default_loop(), &channel, &options, optmask);
ASSERT(rc == ARES_SUCCESS); ASSERT(rc == ARES_SUCCESS);
} }
@ -91,7 +91,7 @@ TEST_IMPL(gethostbyname) {
return 1; return 1;
} }
uv_init();
printf("Start basic gethostbyname test\n"); printf("Start basic gethostbyname test\n");
prep_tcploopback(); prep_tcploopback();
@ -104,11 +104,11 @@ TEST_IMPL(gethostbyname) {
AF_INET, AF_INET,
&aresbynamecallback, &aresbynamecallback,
&bynamecallbacksig); &bynamecallbacksig);
uv_run(); uv_run(uv_default_loop());
ASSERT(ares_bynamecallbacks == 1); ASSERT(ares_bynamecallbacks == 1);
uv_ares_destroy(channel); uv_ares_destroy(uv_default_loop(), channel);
printf("Done basic gethostbyname test\n"); printf("Done basic gethostbyname test\n");
@ -125,7 +125,7 @@ TEST_IMPL(gethostbyname) {
AF_INET, AF_INET,
&aresbynamecallback, &aresbynamecallback,
&bynamecallbacksig); &bynamecallbacksig);
uv_run(); uv_run(uv_default_loop());
ASSERT(ares_bynamecallbacks == 1); ASSERT(ares_bynamecallbacks == 1);
@ -143,11 +143,11 @@ TEST_IMPL(gethostbyname) {
&aresbyaddrcallback, &aresbyaddrcallback,
&byaddrcallbacksig); &byaddrcallbacksig);
uv_run(); uv_run(uv_default_loop());
ASSERT(ares_byaddrcallbacks == 1); ASSERT(ares_byaddrcallbacks == 1);
uv_ares_destroy(channel); uv_ares_destroy(uv_default_loop(), channel);
printf("Done gethostbyname and gethostbyaddr sequential test\n"); printf("Done gethostbyname and gethostbyaddr sequential test\n");
@ -179,13 +179,13 @@ TEST_IMPL(gethostbyname) {
&aresbyaddrcallback, &aresbyaddrcallback,
&byaddrcallbacksig); &byaddrcallbacksig);
uv_run(); uv_run(uv_default_loop());
ASSERT(ares_bynamecallbacks == 1); ASSERT(ares_bynamecallbacks == 1);
ASSERT(ares_byaddrcallbacks == 1); ASSERT(ares_byaddrcallbacks == 1);
uv_ares_destroy(channel); uv_ares_destroy(uv_default_loop(), channel);
printf("Done gethostbyname and gethostbyaddr concurrent test\n"); printf("Done gethostbyname and gethostbyaddr concurrent test\n");
return 0; return 0;

View File

@ -78,14 +78,15 @@ static void on_connection(uv_stream_t* server, int status) {
int r; int r;
if (status != 0) { if (status != 0) {
fprintf(stderr, "Connect error %d\n", uv_last_error().code); fprintf(stderr, "Connect error %d\n",
uv_last_error(uv_default_loop()).code);
} }
ASSERT(status == 0); ASSERT(status == 0);
handle = (uv_handle_t*) malloc(sizeof(uv_tcp_t)); handle = (uv_handle_t*) malloc(sizeof(uv_tcp_t));
ASSERT(handle != NULL); ASSERT(handle != NULL);
uv_tcp_init((uv_tcp_t*)handle); uv_tcp_init(uv_default_loop(), (uv_tcp_t*)handle);
/* associate server with stream */ /* associate server with stream */
handle->data = server; handle->data = server;
@ -95,7 +96,8 @@ static void on_connection(uv_stream_t* server, int status) {
status = uv_getsockname(handle, &sockname, &namelen); status = uv_getsockname(handle, &sockname, &namelen);
if (status != 0) { if (status != 0) {
fprintf(stderr, "uv_getsockname error (accepted) %d\n", uv_last_error().code); fprintf(stderr, "uv_getsockname error (accepted) %d\n",
uv_last_error(uv_default_loop()).code);
} }
ASSERT(status == 0); ASSERT(status == 0);
@ -115,7 +117,8 @@ static void on_connect(uv_connect_t* req, int status) {
r = uv_getsockname((uv_handle_t*)&tcp, &sockname, &namelen); r = uv_getsockname((uv_handle_t*)&tcp, &sockname, &namelen);
if (r != 0) { if (r != 0) {
fprintf(stderr, "uv_getsockname error (connector) %d\n", uv_last_error().code); fprintf(stderr, "uv_getsockname error (connector) %d\n",
uv_last_error(uv_default_loop()).code);
} }
ASSERT(r == 0); ASSERT(r == 0);
@ -132,7 +135,7 @@ static int tcp_listener(int port) {
char ip[20]; char ip[20];
int r; int r;
r = uv_tcp_init(&tcpServer); r = uv_tcp_init(uv_default_loop(), &tcpServer);
if (r) { if (r) {
fprintf(stderr, "Socket creation error\n"); fprintf(stderr, "Socket creation error\n");
return 1; return 1;
@ -154,7 +157,8 @@ static int tcp_listener(int port) {
r = uv_getsockname((uv_handle_t*)&tcpServer, &sockname, &namelen); r = uv_getsockname((uv_handle_t*)&tcpServer, &sockname, &namelen);
if (r != 0) { if (r != 0) {
fprintf(stderr, "uv_getsockname error (listening) %d\n", uv_last_error().code); fprintf(stderr, "uv_getsockname error (listening) %d\n",
uv_last_error(uv_default_loop()).code);
} }
ASSERT(r == 0); ASSERT(r == 0);
@ -175,7 +179,7 @@ static void tcp_connector() {
int r; int r;
struct sockaddr_in server_addr = uv_ip4_addr("127.0.0.1", TEST_PORT); struct sockaddr_in server_addr = uv_ip4_addr("127.0.0.1", TEST_PORT);
r = uv_tcp_init(&tcp); r = uv_tcp_init(uv_default_loop(), &tcp);
tcp.data = &connect_req; tcp.data = &connect_req;
ASSERT(!r); ASSERT(!r);
@ -284,14 +288,14 @@ static void udp_sender(void) {
TEST_IMPL(getsockname_tcp) { TEST_IMPL(getsockname_tcp) {
uv_init();
if (tcp_listener(TEST_PORT)) if (tcp_listener(TEST_PORT))
return 1; return 1;
tcp_connector(); tcp_connector();
uv_run(); uv_run(uv_default_loop());
ASSERT(getsocknamecount == 3); ASSERT(getsocknamecount == 3);

View File

@ -60,19 +60,19 @@ static void idle_cb(uv_idle_t* handle, int status) {
TEST_IMPL(idle_starvation) { TEST_IMPL(idle_starvation) {
int r; int r;
uv_init();
r = uv_idle_init(&idle_handle);
r = uv_idle_init(uv_default_loop(), &idle_handle);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_idle_start(&idle_handle, idle_cb); r = uv_idle_start(&idle_handle, idle_cb);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_init(&timer_handle); r = uv_timer_init(uv_default_loop(), &timer_handle);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_start(&timer_handle, timer_cb, 50, 0); r = uv_timer_start(&timer_handle, timer_cb, 50, 0);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_run(); r = uv_run(uv_default_loop());
ASSERT(r == 0); ASSERT(r == 0);
ASSERT(idle_cb_called > 0); ASSERT(idle_cb_called > 0);

View File

@ -153,7 +153,7 @@ static void idle_1_cb(uv_idle_t* handle, int status) {
/* Init idle_2 and make it active */ /* Init idle_2 and make it active */
if (!idle_2_is_active) { if (!idle_2_is_active) {
r = uv_idle_init(&idle_2_handle); r = uv_idle_init(uv_default_loop(), &idle_2_handle);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_idle_start(&idle_2_handle, idle_2_cb); r = uv_idle_start(&idle_2_handle, idle_2_cb);
ASSERT(r == 0); ASSERT(r == 0);
@ -299,25 +299,25 @@ TEST_IMPL(loop_handles) {
int i; int i;
int r; int r;
uv_init();
r = uv_prepare_init(&prepare_1_handle);
r = uv_prepare_init(uv_default_loop(), &prepare_1_handle);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_prepare_start(&prepare_1_handle, prepare_1_cb); r = uv_prepare_start(&prepare_1_handle, prepare_1_cb);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_check_init(&check_handle); r = uv_check_init(uv_default_loop(), &check_handle);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_check_start(&check_handle, check_cb); r = uv_check_start(&check_handle, check_cb);
ASSERT(r == 0); ASSERT(r == 0);
/* initialize only, prepare_2 is started by prepare_1_cb */ /* initialize only, prepare_2 is started by prepare_1_cb */
r = uv_prepare_init(&prepare_2_handle); r = uv_prepare_init(uv_default_loop(), &prepare_2_handle);
ASSERT(r == 0); ASSERT(r == 0);
for (i = 0; i < IDLE_COUNT; i++) { for (i = 0; i < IDLE_COUNT; i++) {
/* initialize only, idle_1 handles are started by check_cb */ /* initialize only, idle_1 handles are started by check_cb */
r = uv_idle_init(&idle_1_handles[i]); r = uv_idle_init(uv_default_loop(), &idle_1_handles[i]);
ASSERT(r == 0); ASSERT(r == 0);
} }
@ -325,13 +325,13 @@ TEST_IMPL(loop_handles) {
/* the timer callback is there to keep the event loop polling */ /* the timer callback is there to keep the event loop polling */
/* unref it as it is not supposed to keep the loop alive */ /* unref it as it is not supposed to keep the loop alive */
r = uv_timer_init(&timer_handle); r = uv_timer_init(uv_default_loop(), &timer_handle);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_start(&timer_handle, timer_cb, TIMEOUT, TIMEOUT); r = uv_timer_start(&timer_handle, timer_cb, TIMEOUT, TIMEOUT);
ASSERT(r == 0); ASSERT(r == 0);
uv_unref(); uv_unref(uv_default_loop());
r = uv_run(); r = uv_run(uv_default_loop());
ASSERT(r == 0); ASSERT(r == 0);
ASSERT(loop_iteration == ITERATIONS); ASSERT(loop_iteration == ITERATIONS);

View File

@ -100,7 +100,7 @@ static void pinger_read_cb(uv_stream_t* stream, ssize_t nread, uv_buf_t buf) {
pinger = (pinger_t*)stream->data; pinger = (pinger_t*)stream->data;
if (nread < 0) { if (nread < 0) {
ASSERT(uv_last_error().code == UV_EOF); ASSERT(uv_last_error(uv_default_loop()).code == UV_EOF);
puts("got EOF"); puts("got EOF");
@ -155,7 +155,7 @@ static void tcp_pinger_v6_new() {
pinger->pongs = 0; pinger->pongs = 0;
/* Try to connec to the server and do NUM_PINGS ping-pongs. */ /* Try to connec to the server and do NUM_PINGS ping-pongs. */
r = uv_tcp_init(&pinger->tcp); r = uv_tcp_init(uv_default_loop(), &pinger->tcp);
pinger->tcp.data = pinger; pinger->tcp.data = pinger;
ASSERT(!r); ASSERT(!r);
@ -180,7 +180,7 @@ static void tcp_pinger_new() {
pinger->pongs = 0; pinger->pongs = 0;
/* Try to connec to the server and do NUM_PINGS ping-pongs. */ /* Try to connec to the server and do NUM_PINGS ping-pongs. */
r = uv_tcp_init(&pinger->tcp); r = uv_tcp_init(uv_default_loop(), &pinger->tcp);
pinger->tcp.data = pinger; pinger->tcp.data = pinger;
ASSERT(!r); ASSERT(!r);
@ -204,7 +204,7 @@ static void pipe_pinger_new() {
pinger->pongs = 0; pinger->pongs = 0;
/* Try to connec to the server and do NUM_PINGS ping-pongs. */ /* Try to connec to the server and do NUM_PINGS ping-pongs. */
r = uv_pipe_init(&pinger->pipe); r = uv_pipe_init(uv_default_loop(), &pinger->pipe);
pinger->pipe.data = pinger; pinger->pipe.data = pinger;
ASSERT(!r); ASSERT(!r);
@ -221,10 +221,10 @@ static void pipe_pinger_new() {
TEST_IMPL(tcp_ping_pong) { TEST_IMPL(tcp_ping_pong) {
uv_init();
tcp_pinger_new(); tcp_pinger_new();
uv_run(); uv_run(uv_default_loop());
ASSERT(completed_pingers == 1); ASSERT(completed_pingers == 1);
@ -233,10 +233,10 @@ TEST_IMPL(tcp_ping_pong) {
TEST_IMPL(tcp_ping_pong_v6) { TEST_IMPL(tcp_ping_pong_v6) {
uv_init();
tcp_pinger_v6_new(); tcp_pinger_v6_new();
uv_run(); uv_run(uv_default_loop());
ASSERT(completed_pingers == 1); ASSERT(completed_pingers == 1);
@ -245,10 +245,10 @@ TEST_IMPL(tcp_ping_pong_v6) {
TEST_IMPL(pipe_ping_pong) { TEST_IMPL(pipe_ping_pong) {
uv_init();
pipe_pinger_new(); pipe_pinger_new();
uv_run(); uv_run(uv_default_loop());
ASSERT(completed_pingers == 1); ASSERT(completed_pingers == 1);

View File

@ -45,31 +45,31 @@ TEST_IMPL(pipe_bind_error_addrinuse) {
uv_pipe_t server1, server2; uv_pipe_t server1, server2;
int r; int r;
uv_init();
r = uv_pipe_init(&server1);
r = uv_pipe_init(uv_default_loop(), &server1);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_pipe_bind(&server1, TEST_PIPENAME); r = uv_pipe_bind(&server1, TEST_PIPENAME);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_pipe_init(&server2); r = uv_pipe_init(uv_default_loop(), &server2);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_pipe_bind(&server2, TEST_PIPENAME); r = uv_pipe_bind(&server2, TEST_PIPENAME);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EADDRINUSE); ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRINUSE);
r = uv_listen((uv_stream_t*)&server1, SOMAXCONN, NULL); r = uv_listen((uv_stream_t*)&server1, SOMAXCONN, NULL);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&server2, SOMAXCONN, NULL); r = uv_listen((uv_stream_t*)&server2, SOMAXCONN, NULL);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EINVAL); ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL);
uv_close((uv_handle_t*)&server1, close_cb); uv_close((uv_handle_t*)&server1, close_cb);
uv_close((uv_handle_t*)&server2, close_cb); uv_close((uv_handle_t*)&server2, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 2); ASSERT(close_cb_called == 2);
@ -81,18 +81,18 @@ TEST_IMPL(pipe_bind_error_addrnotavail) {
uv_pipe_t server; uv_pipe_t server;
int r; int r;
uv_init();
r = uv_pipe_init(&server);
r = uv_pipe_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_pipe_bind(&server, BAD_PIPENAME); r = uv_pipe_bind(&server, BAD_PIPENAME);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EACCESS); ASSERT(uv_last_error(uv_default_loop()).code == UV_EACCESS);
uv_close((uv_handle_t*)&server, close_cb); uv_close((uv_handle_t*)&server, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 1); ASSERT(close_cb_called == 1);
@ -104,20 +104,20 @@ TEST_IMPL(pipe_bind_error_inval) {
uv_pipe_t server; uv_pipe_t server;
int r; int r;
uv_init();
r = uv_pipe_init(&server);
r = uv_pipe_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_pipe_bind(&server, TEST_PIPENAME); r = uv_pipe_bind(&server, TEST_PIPENAME);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_pipe_bind(&server, TEST_PIPENAME_2); r = uv_pipe_bind(&server, TEST_PIPENAME_2);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EINVAL); ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb); uv_close((uv_handle_t*)&server, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 1); ASSERT(close_cb_called == 1);
@ -129,18 +129,18 @@ TEST_IMPL(pipe_listen_without_bind) {
uv_pipe_t server; uv_pipe_t server;
int r; int r;
uv_init();
r = uv_pipe_init(&server);
r = uv_pipe_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&server, SOMAXCONN, NULL); r = uv_listen((uv_stream_t*)&server, SOMAXCONN, NULL);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EINVAL); ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb); uv_close((uv_handle_t*)&server, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 1); ASSERT(close_cb_called == 1);

View File

@ -24,51 +24,46 @@
TEST_IMPL(ref) { TEST_IMPL(ref) {
uv_init(); uv_run(uv_default_loop());
uv_run();
return 0; return 0;
} }
TEST_IMPL(idle_ref) { TEST_IMPL(idle_ref) {
uv_idle_t h; uv_idle_t h;
uv_init(); uv_idle_init(uv_default_loop(), &h);
uv_idle_init(&h);
uv_idle_start(&h, NULL); uv_idle_start(&h, NULL);
uv_unref(); uv_unref(uv_default_loop());
uv_run(); uv_run(uv_default_loop());
return 0; return 0;
} }
TEST_IMPL(async_ref) { TEST_IMPL(async_ref) {
uv_async_t h; uv_async_t h;
uv_init(); uv_async_init(uv_default_loop(), &h, NULL);
uv_async_init(&h, NULL); uv_unref(uv_default_loop());
uv_unref(); uv_run(uv_default_loop());
uv_run();
return 0; return 0;
} }
TEST_IMPL(prepare_ref) { TEST_IMPL(prepare_ref) {
uv_prepare_t h; uv_prepare_t h;
uv_init(); uv_prepare_init(uv_default_loop(), &h);
uv_prepare_init(&h);
uv_prepare_start(&h, NULL); uv_prepare_start(&h, NULL);
uv_unref(); uv_unref(uv_default_loop());
uv_run(); uv_run(uv_default_loop());
return 0; return 0;
} }
TEST_IMPL(check_ref) { TEST_IMPL(check_ref) {
uv_check_t h; uv_check_t h;
uv_init(); uv_check_init(uv_default_loop(), &h);
uv_check_init(&h);
uv_check_start(&h, NULL); uv_check_start(&h, NULL);
uv_unref(); uv_unref(uv_default_loop());
uv_run(); uv_run(uv_default_loop());
return 0; return 0;
} }
@ -77,15 +72,15 @@ static void prepare_cb(uv_prepare_t* handle, int status) {
ASSERT(handle != NULL); ASSERT(handle != NULL);
ASSERT(status == 0); ASSERT(status == 0);
uv_unref(); uv_unref(uv_default_loop());
} }
TEST_IMPL(unref_in_prepare_cb) { TEST_IMPL(unref_in_prepare_cb) {
uv_prepare_t h; uv_prepare_t h;
uv_init();
uv_prepare_init(&h); uv_prepare_init(uv_default_loop(), &h);
uv_prepare_start(&h, prepare_cb); uv_prepare_start(&h, prepare_cb);
uv_run(); uv_run(uv_default_loop());
return 0; return 0;
} }

View File

@ -48,7 +48,7 @@ static uv_buf_t alloc_cb(uv_handle_t* handle, size_t size) {
static void read_cb(uv_stream_t* t, ssize_t nread, uv_buf_t buf) { static void read_cb(uv_stream_t* t, ssize_t nread, uv_buf_t buf) {
uv_err_t err = uv_last_error(); uv_err_t err = uv_last_error(uv_default_loop());
ASSERT((uv_tcp_t*)t == &tcp); ASSERT((uv_tcp_t*)t == &tcp);
@ -153,22 +153,22 @@ TEST_IMPL(shutdown_eof) {
struct sockaddr_in server_addr; struct sockaddr_in server_addr;
int r; int r;
uv_init();
qbuf.base = "Q"; qbuf.base = "Q";
qbuf.len = 1; qbuf.len = 1;
uv_timer_init(&timer); uv_timer_init(uv_default_loop(), &timer);
uv_timer_start(&timer, timer_cb, 100, 0); uv_timer_start(&timer, timer_cb, 100, 0);
server_addr = uv_ip4_addr("127.0.0.1", TEST_PORT); server_addr = uv_ip4_addr("127.0.0.1", TEST_PORT);
r = uv_tcp_init(&tcp); r = uv_tcp_init(uv_default_loop(), &tcp);
ASSERT(!r); ASSERT(!r);
r = uv_tcp_connect(&connect_req, &tcp, server_addr, connect_cb); r = uv_tcp_connect(&connect_req, &tcp, server_addr, connect_cb);
ASSERT(!r); ASSERT(!r);
uv_run(); uv_run(uv_default_loop());
ASSERT(called_connect_cb == 1); ASSERT(called_connect_cb == 1);
ASSERT(called_shutdown_cb == 1); ASSERT(called_shutdown_cb == 1);

View File

@ -75,7 +75,7 @@ uv_buf_t on_alloc(uv_handle_t* handle, size_t suggested_size) {
void on_read(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) { void on_read(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) {
uv_err_t err = uv_last_error(); uv_err_t err = uv_last_error(uv_default_loop());
if (nread > 0) { if (nread > 0) {
output_used += nread; output_used += nread;
@ -116,14 +116,14 @@ static void timer_cb(uv_timer_t* handle, int status) {
TEST_IMPL(spawn_exit_code) { TEST_IMPL(spawn_exit_code) {
int r; int r;
uv_init();
init_process_options("spawn_helper1", exit_cb); init_process_options("spawn_helper1", exit_cb);
r = uv_spawn(&process, options); r = uv_spawn(uv_default_loop(), &process, options);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_run(); r = uv_run(uv_default_loop());
ASSERT(r == 0); ASSERT(r == 0);
ASSERT(exit_cb_called == 1); ASSERT(exit_cb_called == 1);
@ -137,20 +137,20 @@ TEST_IMPL(spawn_stdout) {
int r; int r;
uv_pipe_t out; uv_pipe_t out;
uv_init();
init_process_options("spawn_helper2", exit_cb); init_process_options("spawn_helper2", exit_cb);
uv_pipe_init(&out); uv_pipe_init(uv_default_loop(), &out);
options.stdout_stream = &out; options.stdout_stream = &out;
r = uv_spawn(&process, options); r = uv_spawn(uv_default_loop(), &process, options);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_run(); r = uv_run(uv_default_loop());
ASSERT(r == 0); ASSERT(r == 0);
ASSERT(exit_cb_called == 1); ASSERT(exit_cb_called == 1);
@ -170,16 +170,16 @@ int r;
uv_buf_t buf; uv_buf_t buf;
char buffer[] = "hello-from-spawn_stdin"; char buffer[] = "hello-from-spawn_stdin";
uv_init();
init_process_options("spawn_helper3", exit_cb); init_process_options("spawn_helper3", exit_cb);
uv_pipe_init(&out); uv_pipe_init(uv_default_loop(), &out);
uv_pipe_init(&in); uv_pipe_init(uv_default_loop(), &in);
options.stdout_stream = &out; options.stdout_stream = &out;
options.stdin_stream = &in; options.stdin_stream = &in;
r = uv_spawn(&process, options); r = uv_spawn(uv_default_loop(), &process, options);
ASSERT(r == 0); ASSERT(r == 0);
buf.base = buffer; buf.base = buffer;
@ -190,7 +190,7 @@ int r;
r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_run(); r = uv_run(uv_default_loop());
ASSERT(r == 0); ASSERT(r == 0);
ASSERT(exit_cb_called == 1); ASSERT(exit_cb_called == 1);
@ -204,20 +204,20 @@ int r;
TEST_IMPL(spawn_and_kill) { TEST_IMPL(spawn_and_kill) {
int r; int r;
uv_init();
init_process_options("spawn_helper4", kill_cb); init_process_options("spawn_helper4", kill_cb);
r = uv_spawn(&process, options); r = uv_spawn(uv_default_loop(), &process, options);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_init(&timer); r = uv_timer_init(uv_default_loop(), &timer);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_start(&timer, timer_cb, 500, 0); r = uv_timer_start(&timer, timer_cb, 500, 0);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_run(); r = uv_run(uv_default_loop());
ASSERT(r == 0); ASSERT(r == 0);
ASSERT(exit_cb_called == 1); ASSERT(exit_cb_called == 1);
@ -234,7 +234,7 @@ TEST_IMPL(spawn_detect_pipe_name_collisions_on_windows) {
char name[64]; char name[64];
HANDLE pipe_handle; HANDLE pipe_handle;
uv_init();
init_process_options("spawn_helper2", exit_cb); init_process_options("spawn_helper2", exit_cb);

View File

@ -39,14 +39,14 @@ TEST_IMPL(tcp_bind_error_addrinuse) {
uv_tcp_t server1, server2; uv_tcp_t server1, server2;
int r; int r;
uv_init();
r = uv_tcp_init(&server1);
r = uv_tcp_init(uv_default_loop(), &server1);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind(&server1, addr); r = uv_tcp_bind(&server1, addr);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_init(&server2); r = uv_tcp_init(uv_default_loop(), &server2);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind(&server2, addr); r = uv_tcp_bind(&server2, addr);
ASSERT(r == 0); ASSERT(r == 0);
@ -56,12 +56,12 @@ TEST_IMPL(tcp_bind_error_addrinuse) {
r = uv_listen((uv_stream_t*)&server2, 128, NULL); r = uv_listen((uv_stream_t*)&server2, 128, NULL);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EADDRINUSE); ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRINUSE);
uv_close((uv_handle_t*)&server1, close_cb); uv_close((uv_handle_t*)&server1, close_cb);
uv_close((uv_handle_t*)&server2, close_cb); uv_close((uv_handle_t*)&server2, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 2); ASSERT(close_cb_called == 2);
@ -74,20 +74,20 @@ TEST_IMPL(tcp_bind_error_addrnotavail_1) {
uv_tcp_t server; uv_tcp_t server;
int r; int r;
uv_init();
r = uv_tcp_init(&server);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind(&server, addr); r = uv_tcp_bind(&server, addr);
/* It seems that Linux is broken here - bind succeeds. */ /* It seems that Linux is broken here - bind succeeds. */
if (r == -1) { if (r == -1) {
ASSERT(uv_last_error().code == UV_EADDRNOTAVAIL); ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRNOTAVAIL);
} }
uv_close((uv_handle_t*)&server, close_cb); uv_close((uv_handle_t*)&server, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 1); ASSERT(close_cb_called == 1);
@ -100,17 +100,15 @@ TEST_IMPL(tcp_bind_error_addrnotavail_2) {
uv_tcp_t server; uv_tcp_t server;
int r; int r;
uv_init(); r = uv_tcp_init(uv_default_loop(), &server);
r = uv_tcp_init(&server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind(&server, addr); r = uv_tcp_bind(&server, addr);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EADDRNOTAVAIL); ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRNOTAVAIL);
uv_close((uv_handle_t*)&server, close_cb); uv_close((uv_handle_t*)&server, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 1); ASSERT(close_cb_called == 1);
@ -126,18 +124,18 @@ TEST_IMPL(tcp_bind_error_fault) {
garbage_addr = (struct sockaddr_in*) &garbage; garbage_addr = (struct sockaddr_in*) &garbage;
uv_init();
r = uv_tcp_init(&server);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind(&server, *garbage_addr); r = uv_tcp_bind(&server, *garbage_addr);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EFAULT); ASSERT(uv_last_error(uv_default_loop()).code == UV_EFAULT);
uv_close((uv_handle_t*)&server, close_cb); uv_close((uv_handle_t*)&server, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 1); ASSERT(close_cb_called == 1);
@ -152,20 +150,20 @@ TEST_IMPL(tcp_bind_error_inval) {
uv_tcp_t server; uv_tcp_t server;
int r; int r;
uv_init();
r = uv_tcp_init(&server);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind(&server, addr1); r = uv_tcp_bind(&server, addr1);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind(&server, addr2); r = uv_tcp_bind(&server, addr2);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EINVAL); ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb); uv_close((uv_handle_t*)&server, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 1); ASSERT(close_cb_called == 1);
@ -179,9 +177,9 @@ TEST_IMPL(tcp_bind_localhost_ok) {
uv_tcp_t server; uv_tcp_t server;
int r; int r;
uv_init();
r = uv_tcp_init(&server);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind(&server, addr); r = uv_tcp_bind(&server, addr);
ASSERT(r == 0); ASSERT(r == 0);
@ -194,8 +192,8 @@ TEST_IMPL(tcp_listen_without_bind) {
int r; int r;
uv_tcp_t server; uv_tcp_t server;
uv_init();
r = uv_tcp_init(&server); r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&server, 128, NULL); r = uv_listen((uv_stream_t*)&server, 128, NULL);
ASSERT(r == 0); ASSERT(r == 0);

View File

@ -39,14 +39,14 @@ TEST_IMPL(tcp_bind6_error_addrinuse) {
uv_tcp_t server1, server2; uv_tcp_t server1, server2;
int r; int r;
uv_init();
r = uv_tcp_init(&server1);
r = uv_tcp_init(uv_default_loop(), &server1);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind6(&server1, addr); r = uv_tcp_bind6(&server1, addr);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_init(&server2); r = uv_tcp_init(uv_default_loop(), &server2);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind6(&server2, addr); r = uv_tcp_bind6(&server2, addr);
ASSERT(r == 0); ASSERT(r == 0);
@ -56,12 +56,12 @@ TEST_IMPL(tcp_bind6_error_addrinuse) {
r = uv_listen((uv_stream_t*)&server2, 128, NULL); r = uv_listen((uv_stream_t*)&server2, 128, NULL);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EADDRINUSE); ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRINUSE);
uv_close((uv_handle_t*)&server1, close_cb); uv_close((uv_handle_t*)&server1, close_cb);
uv_close((uv_handle_t*)&server2, close_cb); uv_close((uv_handle_t*)&server2, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 2); ASSERT(close_cb_called == 2);
@ -74,17 +74,17 @@ TEST_IMPL(tcp_bind6_error_addrnotavail) {
uv_tcp_t server; uv_tcp_t server;
int r; int r;
uv_init();
r = uv_tcp_init(&server);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind6(&server, addr); r = uv_tcp_bind6(&server, addr);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EADDRNOTAVAIL); ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRNOTAVAIL);
uv_close((uv_handle_t*)&server, close_cb); uv_close((uv_handle_t*)&server, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 1); ASSERT(close_cb_called == 1);
@ -100,18 +100,18 @@ TEST_IMPL(tcp_bind6_error_fault) {
garbage_addr = (struct sockaddr_in6*) &garbage; garbage_addr = (struct sockaddr_in6*) &garbage;
uv_init();
r = uv_tcp_init(&server);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind6(&server, *garbage_addr); r = uv_tcp_bind6(&server, *garbage_addr);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EFAULT); ASSERT(uv_last_error(uv_default_loop()).code == UV_EFAULT);
uv_close((uv_handle_t*)&server, close_cb); uv_close((uv_handle_t*)&server, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 1); ASSERT(close_cb_called == 1);
@ -126,20 +126,20 @@ TEST_IMPL(tcp_bind6_error_inval) {
uv_tcp_t server; uv_tcp_t server;
int r; int r;
uv_init();
r = uv_tcp_init(&server);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind6(&server, addr1); r = uv_tcp_bind6(&server, addr1);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind6(&server, addr2); r = uv_tcp_bind6(&server, addr2);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EINVAL); ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb); uv_close((uv_handle_t*)&server, close_cb);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 1); ASSERT(close_cb_called == 1);
@ -153,9 +153,9 @@ TEST_IMPL(tcp_bind6_localhost_ok) {
uv_tcp_t server; uv_tcp_t server;
int r; int r;
uv_init();
r = uv_tcp_init(&server);
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_bind6(&server, addr); r = uv_tcp_bind6(&server, addr);
ASSERT(r == 0); ASSERT(r == 0);

View File

@ -87,7 +87,7 @@ static void read_cb(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) {
ASSERT(tcp != NULL); ASSERT(tcp != NULL);
if (nread < 0) { if (nread < 0) {
ASSERT(uv_last_error().code == UV_EOF); ASSERT(uv_last_error(uv_default_loop()).code == UV_EOF);
printf("GOT EOF\n"); printf("GOT EOF\n");
if (buf.base) { if (buf.base) {
@ -108,7 +108,7 @@ static void write_cb(uv_write_t* req, int status) {
ASSERT(req != NULL); ASSERT(req != NULL);
if (status) { if (status) {
uv_err_t err = uv_last_error(); uv_err_t err = uv_last_error(uv_default_loop());
fprintf(stderr, "uv_write error: %s\n", uv_strerror(err)); fprintf(stderr, "uv_write error: %s\n", uv_strerror(err));
ASSERT(0); ASSERT(0);
} }
@ -176,15 +176,15 @@ TEST_IMPL(tcp_writealot) {
ASSERT(send_buffer != NULL); ASSERT(send_buffer != NULL);
uv_init();
r = uv_tcp_init(client);
r = uv_tcp_init(uv_default_loop(), client);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_tcp_connect(connect_req, client, addr, connect_cb); r = uv_tcp_connect(connect_req, client, addr, connect_cb);
ASSERT(r == 0); ASSERT(r == 0);
uv_run(); uv_run(uv_default_loop());
ASSERT(shutdown_cb_called == 1); ASSERT(shutdown_cb_called == 1);
ASSERT(connect_cb_called == 1); ASSERT(connect_cb_called == 1);

View File

@ -49,14 +49,15 @@ static void repeat_1_cb(uv_timer_t* handle, int status) {
ASSERT(uv_timer_get_repeat((uv_timer_t*)handle) == 50); ASSERT(uv_timer_get_repeat((uv_timer_t*)handle) == 50);
LOGF("repeat_1_cb called after %ld ms\n", (long int)(uv_now() - start_time)); LOGF("repeat_1_cb called after %ld ms\n",
(long int)(uv_now(uv_default_loop()) - start_time));
repeat_1_cb_called++; repeat_1_cb_called++;
r = uv_timer_again(&repeat_2); r = uv_timer_again(&repeat_2);
ASSERT(r == 0); ASSERT(r == 0);
if (uv_now() >= start_time + 500) { if (uv_now(uv_default_loop()) >= start_time + 500) {
uv_close((uv_handle_t*)handle, close_cb); uv_close((uv_handle_t*)handle, close_cb);
/* We're not calling uv_timer_again on repeat_2 any more, so after this */ /* We're not calling uv_timer_again on repeat_2 any more, so after this */
/* timer_2_cb is expected. */ /* timer_2_cb is expected. */
@ -71,7 +72,8 @@ static void repeat_2_cb(uv_timer_t* handle, int status) {
ASSERT(status == 0); ASSERT(status == 0);
ASSERT(repeat_2_cb_allowed); ASSERT(repeat_2_cb_allowed);
LOGF("repeat_2_cb called after %ld ms\n", (long int)(uv_now() - start_time)); LOGF("repeat_2_cb called after %ld ms\n",
(long int)(uv_now(uv_default_loop()) - start_time));
repeat_2_cb_called++; repeat_2_cb_called++;
@ -93,21 +95,21 @@ static void repeat_2_cb(uv_timer_t* handle, int status) {
TEST_IMPL(timer_again) { TEST_IMPL(timer_again) {
int r; int r;
uv_init();
start_time = uv_now();
start_time = uv_now(uv_default_loop());
ASSERT(0 < start_time); ASSERT(0 < start_time);
/* Verify that it is not possible to uv_timer_again a never-started timer. */ /* Verify that it is not possible to uv_timer_again a never-started timer. */
r = uv_timer_init(&dummy); r = uv_timer_init(uv_default_loop(), &dummy);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_again(&dummy); r = uv_timer_again(&dummy);
ASSERT(r == -1); ASSERT(r == -1);
ASSERT(uv_last_error().code == UV_EINVAL); ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL);
uv_unref(); uv_unref(uv_default_loop());
/* Start timer repeat_1. */ /* Start timer repeat_1. */
r = uv_timer_init(&repeat_1); r = uv_timer_init(uv_default_loop(), &repeat_1);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_start(&repeat_1, repeat_1_cb, 50, 0); r = uv_timer_start(&repeat_1, repeat_1_cb, 50, 0);
ASSERT(r == 0); ASSERT(r == 0);
@ -121,21 +123,21 @@ TEST_IMPL(timer_again) {
* Start another repeating timer. It'll be again()ed by the repeat_1 so * Start another repeating timer. It'll be again()ed by the repeat_1 so
* it should not time out until repeat_1 stops. * it should not time out until repeat_1 stops.
*/ */
r = uv_timer_init(&repeat_2); r = uv_timer_init(uv_default_loop(), &repeat_2);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_start(&repeat_2, repeat_2_cb, 100, 100); r = uv_timer_start(&repeat_2, repeat_2_cb, 100, 100);
ASSERT(r == 0); ASSERT(r == 0);
ASSERT(uv_timer_get_repeat(&repeat_2) == 100); ASSERT(uv_timer_get_repeat(&repeat_2) == 100);
uv_run(); uv_run(uv_default_loop());
ASSERT(repeat_1_cb_called == 10); ASSERT(repeat_1_cb_called == 10);
ASSERT(repeat_2_cb_called == 2); ASSERT(repeat_2_cb_called == 2);
ASSERT(close_cb_called == 2); ASSERT(close_cb_called == 2);
LOGF("Test took %ld ms (expected ~700 ms)\n", LOGF("Test took %ld ms (expected ~700 ms)\n",
(long int)(uv_now() - start_time)); (long int)(uv_now(uv_default_loop()) - start_time));
ASSERT(700 <= uv_now() - start_time); ASSERT(700 <= uv_now(uv_default_loop()) - start_time);
return 0; return 0;
} }

View File

@ -53,7 +53,7 @@ static void once_cb(uv_timer_t* handle, int status) {
uv_close((uv_handle_t*)handle, once_close_cb); uv_close((uv_handle_t*)handle, once_close_cb);
/* Just call this randomly for the code coverage. */ /* Just call this randomly for the code coverage. */
uv_update_time(); uv_update_time(uv_default_loop());
} }
@ -90,37 +90,35 @@ TEST_IMPL(timer) {
uv_timer_t repeat, never; uv_timer_t repeat, never;
int i, r; int i, r;
uv_init(); start_time = uv_now(uv_default_loop());
start_time = uv_now();
ASSERT(0 < start_time); ASSERT(0 < start_time);
/* Let 10 timers time out in 500 ms total. */ /* Let 10 timers time out in 500 ms total. */
for (i = 0; i < 10; i++) { for (i = 0; i < 10; i++) {
once = (uv_timer_t*)malloc(sizeof(*once)); once = (uv_timer_t*)malloc(sizeof(*once));
ASSERT(once != NULL); ASSERT(once != NULL);
r = uv_timer_init(once); r = uv_timer_init(uv_default_loop(), once);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_start(once, once_cb, i * 50, 0); r = uv_timer_start(once, once_cb, i * 50, 0);
ASSERT(r == 0); ASSERT(r == 0);
} }
/* The 11th timer is a repeating timer that runs 4 times */ /* The 11th timer is a repeating timer that runs 4 times */
r = uv_timer_init(&repeat); r = uv_timer_init(uv_default_loop(), &repeat);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_start(&repeat, repeat_cb, 100, 100); r = uv_timer_start(&repeat, repeat_cb, 100, 100);
ASSERT(r == 0); ASSERT(r == 0);
/* The 12th timer should not do anything. */ /* The 12th timer should not do anything. */
r = uv_timer_init(&never); r = uv_timer_init(uv_default_loop(), &never);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_start(&never, never_cb, 100, 100); r = uv_timer_start(&never, never_cb, 100, 100);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_stop(&never); r = uv_timer_stop(&never);
ASSERT(r == 0); ASSERT(r == 0);
uv_unref(); uv_unref(uv_default_loop());
uv_run(); uv_run(uv_default_loop());
ASSERT(once_cb_called == 10); ASSERT(once_cb_called == 10);
ASSERT(once_close_cb_called == 10); ASSERT(once_close_cb_called == 10);
@ -128,7 +126,7 @@ TEST_IMPL(timer) {
ASSERT(repeat_cb_called == 5); ASSERT(repeat_cb_called == 5);
ASSERT(repeat_close_cb_called == 1); ASSERT(repeat_close_cb_called == 1);
ASSERT(500 <= uv_now() - start_time); ASSERT(500 <= uv_now(uv_default_loop()) - start_time);
return 0; return 0;
} }

View File

@ -50,7 +50,7 @@ static void send_cb(uv_udp_send_t* req, int status) {
CHECK_HANDLE(req->handle); CHECK_HANDLE(req->handle);
ASSERT(status == -1); ASSERT(status == -1);
ASSERT(uv_last_error().code == UV_EMSGSIZE); ASSERT(uv_last_error(uv_default_loop()).code == UV_EMSGSIZE);
uv_close((uv_handle_t*)req->handle, close_cb); uv_close((uv_handle_t*)req->handle, close_cb);
send_cb_called++; send_cb_called++;
@ -65,9 +65,7 @@ TEST_IMPL(udp_dgram_too_big) {
memset(dgram, 42, sizeof dgram); /* silence valgrind */ memset(dgram, 42, sizeof dgram); /* silence valgrind */
uv_init(); r = uv_udp_init(uv_default_loop(), &handle_);
r = uv_udp_init(&handle_);
ASSERT(r == 0); ASSERT(r == 0);
buf = uv_buf_init(dgram, sizeof dgram); buf = uv_buf_init(dgram, sizeof dgram);
@ -79,7 +77,7 @@ TEST_IMPL(udp_dgram_too_big) {
ASSERT(close_cb_called == 0); ASSERT(close_cb_called == 0);
ASSERT(send_cb_called == 0); ASSERT(send_cb_called == 0);
uv_run(); uv_run(uv_default_loop());
ASSERT(send_cb_called == 1); ASSERT(send_cb_called == 1);
ASSERT(close_cb_called == 1); ASSERT(close_cb_called == 1);

View File

@ -100,11 +100,9 @@ static void do_test(uv_udp_recv_cb recv_cb, int bind_flags) {
uv_buf_t buf; uv_buf_t buf;
int r; int r;
uv_init();
addr6 = uv_ip6_addr("::0", TEST_PORT); addr6 = uv_ip6_addr("::0", TEST_PORT);
r = uv_udp_init(&server); r = uv_udp_init(uv_default_loop(), &server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_udp_bind6(&server, addr6, bind_flags); r = uv_udp_bind6(&server, addr6, bind_flags);
@ -113,7 +111,7 @@ static void do_test(uv_udp_recv_cb recv_cb, int bind_flags) {
r = uv_udp_recv_start(&server, alloc_cb, recv_cb); r = uv_udp_recv_start(&server, alloc_cb, recv_cb);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_udp_init(&client); r = uv_udp_init(uv_default_loop(), &client);
ASSERT(r == 0); ASSERT(r == 0);
buf = uv_buf_init("PING", 4); buf = uv_buf_init("PING", 4);
@ -122,7 +120,7 @@ static void do_test(uv_udp_recv_cb recv_cb, int bind_flags) {
r = uv_udp_send(&req_, &client, &buf, 1, addr, send_cb); r = uv_udp_send(&req_, &client, &buf, 1, addr, send_cb);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_init(&timeout); r = uv_timer_init(uv_default_loop(), &timeout);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_timer_start(&timeout, timeout_cb, 500, 0); r = uv_timer_start(&timeout, timeout_cb, 500, 0);
@ -132,7 +130,7 @@ static void do_test(uv_udp_recv_cb recv_cb, int bind_flags) {
ASSERT(send_cb_called == 0); ASSERT(send_cb_called == 0);
ASSERT(recv_cb_called == 0); ASSERT(recv_cb_called == 0);
uv_run(); uv_run(uv_default_loop());
ASSERT(close_cb_called == 3); ASSERT(close_cb_called == 3);
} }

View File

@ -170,9 +170,7 @@ TEST_IMPL(udp_send_and_recv) {
addr = uv_ip4_addr("0.0.0.0", TEST_PORT); addr = uv_ip4_addr("0.0.0.0", TEST_PORT);
uv_init(); r = uv_udp_init(uv_default_loop(), &server);
r = uv_udp_init(&server);
ASSERT(r == 0); ASSERT(r == 0);
r = uv_udp_bind(&server, addr, 0); r = uv_udp_bind(&server, addr, 0);
@ -183,7 +181,7 @@ TEST_IMPL(udp_send_and_recv) {
addr = uv_ip4_addr("127.0.0.1", TEST_PORT); addr = uv_ip4_addr("127.0.0.1", TEST_PORT);
r = uv_udp_init(&client); r = uv_udp_init(uv_default_loop(), &client);
ASSERT(r == 0); ASSERT(r == 0);
/* client sends "PING", expects "PONG" */ /* client sends "PING", expects "PONG" */
@ -198,7 +196,7 @@ TEST_IMPL(udp_send_and_recv) {
ASSERT(sv_send_cb_called == 0); ASSERT(sv_send_cb_called == 0);
ASSERT(sv_recv_cb_called == 0); ASSERT(sv_recv_cb_called == 0);
uv_run(); uv_run(uv_default_loop());
ASSERT(cl_send_cb_called == 1); ASSERT(cl_send_cb_called == 1);
ASSERT(cl_recv_cb_called == 1); ASSERT(cl_recv_cb_called == 1);