summaryrefslogtreecommitdiff
path: root/deps/uv/test/benchmark-ping-pongs.c
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2011-06-07 18:37:27 +0200
committerRyan Dahl <ry@tinyclouds.org>2011-06-07 18:59:44 +0200
commit7a5977b5d61186baaa71b19349f3fdfa41e6042e (patch)
treedcfd59c4e288b38696247213f64bf17a28b6c566 /deps/uv/test/benchmark-ping-pongs.c
parent794cb60f9e8689ec6e163aa1119fdbb07d3024eb (diff)
downloadandroid-node-v8-7a5977b5d61186baaa71b19349f3fdfa41e6042e.tar.gz
android-node-v8-7a5977b5d61186baaa71b19349f3fdfa41e6042e.tar.bz2
android-node-v8-7a5977b5d61186baaa71b19349f3fdfa41e6042e.zip
Upgrade libuv to e58a1abff02d7bacf89a56de9050e27690a97bc5
Diffstat (limited to 'deps/uv/test/benchmark-ping-pongs.c')
-rw-r--r--deps/uv/test/benchmark-ping-pongs.c38
1 files changed, 24 insertions, 14 deletions
diff --git a/deps/uv/test/benchmark-ping-pongs.c b/deps/uv/test/benchmark-ping-pongs.c
index 1bda337779..9fdd560821 100644
--- a/deps/uv/test/benchmark-ping-pongs.c
+++ b/deps/uv/test/benchmark-ping-pongs.c
@@ -33,7 +33,7 @@
typedef struct {
int pongs;
int state;
- uv_handle_t handle;
+ uv_tcp_t tcp;
uv_req_t connect_req;
uv_req_t shutdown_req;
} pinger_t;
@@ -47,12 +47,12 @@ typedef struct buf_s {
static char PING[] = "PING\n";
static buf_t* buf_freelist = NULL;
-
+static int pinger_shutdown_cb_called;
static int completed_pingers = 0;
static int64_t start_time;
-static uv_buf_t buf_alloc(uv_handle_t* handle, size_t size) {
+static uv_buf_t buf_alloc(uv_tcp_t* tcp, size_t size) {
buf_t* ab;
ab = buf_freelist;
@@ -107,7 +107,7 @@ static void pinger_write_ping(pinger_t* pinger) {
buf.len = strlen(PING);
req = (uv_req_t*)malloc(sizeof(*req));
- uv_req_init(req, &pinger->handle, pinger_write_cb);
+ uv_req_init(req, (uv_handle_t*)(&pinger->tcp), pinger_write_cb);
if (uv_write(req, &buf, 1)) {
FATAL("uv_write failed");
@@ -117,14 +117,21 @@ static void pinger_write_ping(pinger_t* pinger) {
static void pinger_shutdown_cb(uv_handle_t* handle, int status) {
ASSERT(status == 0);
+ pinger_shutdown_cb_called++;
+
+ /*
+ * The close callback has not been triggered yet. We must wait for EOF
+ * until we close the connection.
+ */
+ ASSERT(completed_pingers == 0);
}
-static void pinger_read_cb(uv_handle_t* handle, int nread, uv_buf_t buf) {
+static void pinger_read_cb(uv_tcp_t* tcp, int nread, uv_buf_t buf) {
unsigned int i;
pinger_t* pinger;
- pinger = (pinger_t*)handle->data;
+ pinger = (pinger_t*)tcp->data;
if (nread < 0) {
ASSERT(uv_last_error().code == UV_EOF);
@@ -133,6 +140,9 @@ static void pinger_read_cb(uv_handle_t* handle, int nread, uv_buf_t buf) {
buf_free(buf);
}
+ ASSERT(pinger_shutdown_cb_called == 1);
+ uv_close((uv_handle_t*)tcp);
+
return;
}
@@ -143,10 +153,9 @@ static void pinger_read_cb(uv_handle_t* handle, int nread, uv_buf_t buf) {
if (pinger->state == 0) {
pinger->pongs++;
if (uv_now() - start_time > TIME) {
- uv_req_init(&pinger->shutdown_req, handle, pinger_shutdown_cb);
+ uv_req_init(&pinger->shutdown_req, (uv_handle_t*)tcp, pinger_shutdown_cb);
uv_shutdown(&pinger->shutdown_req);
break;
- return;
} else {
pinger_write_ping(pinger);
}
@@ -164,7 +173,7 @@ static void pinger_connect_cb(uv_req_t *req, int status) {
pinger_write_ping(pinger);
- if (uv_read_start(req->handle, pinger_read_cb)) {
+ if (uv_read_start((uv_tcp_t*)(req->handle), buf_alloc, pinger_read_cb)) {
FATAL("uv_read_start failed");
}
}
@@ -181,21 +190,22 @@ static void pinger_new() {
pinger->pongs = 0;
/* Try to connec to the server and do NUM_PINGS ping-pongs. */
- r = uv_tcp_init(&pinger->handle, pinger_close_cb, (void*)pinger);
+ r = uv_tcp_init(&pinger->tcp, pinger_close_cb, (void*)pinger);
ASSERT(!r);
/* We are never doing multiple reads/connects at a time anyway. */
/* so these handles can be pre-initialized. */
- uv_req_init(&pinger->connect_req, &pinger->handle, pinger_connect_cb);
+ uv_req_init(&pinger->connect_req, (uv_handle_t*)&pinger->tcp,
+ pinger_connect_cb);
- uv_bind(&pinger->handle, (struct sockaddr*)&client_addr);
- r = uv_connect(&pinger->connect_req, (struct sockaddr*)&server_addr);
+ uv_bind(&pinger->tcp, client_addr);
+ r = uv_connect(&pinger->connect_req, server_addr);
ASSERT(!r);
}
BENCHMARK_IMPL(ping_pongs) {
- uv_init(buf_alloc);
+ uv_init();
start_time = uv_now();
pinger_new();