diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2011-06-07 18:37:27 +0200 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2011-06-07 18:59:44 +0200 |
commit | 7a5977b5d61186baaa71b19349f3fdfa41e6042e (patch) | |
tree | dcfd59c4e288b38696247213f64bf17a28b6c566 /deps/uv/test/benchmark-ping-pongs.c | |
parent | 794cb60f9e8689ec6e163aa1119fdbb07d3024eb (diff) | |
download | android-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.c | 38 |
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(); |