Skip to content

Instantly share code, notes, and snippets.

@igorzi
Created September 26, 2011 20:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save igorzi/1243268 to your computer and use it in GitHub Desktop.
Save igorzi/1243268 to your computer and use it in GitHub Desktop.
From 557a3e5f8edd66d1eeb54c4f5028aa4cbd05dda6 Mon Sep 17 00:00:00 2001
From: Igor Zinkovsky <igorzi@microsoft.com>
Date: Mon, 26 Sep 2011 13:09:12 -0700
Subject: [PATCH] fix tcp_write_error for windows
---
test/test-tcp-write-error.c | 56 ++++++++++++++++++++++++++----------------
1 files changed, 35 insertions(+), 21 deletions(-)
diff --git a/test/test-tcp-write-error.c b/test/test-tcp-write-error.c
index f3d12b8..efc85ba 100644
--- a/test/test-tcp-write-error.c
+++ b/test/test-tcp-write-error.c
@@ -35,11 +35,15 @@ static uv_buf_t alloc_cb(uv_handle_t* handle, size_t suggested_size);
static uv_tcp_t tcp_server;
static uv_tcp_t tcp_client;
static uv_tcp_t tcp_peer; /* client socket as accept()-ed by server */
-static uv_write_t write_req;
static uv_connect_t connect_req;
static int write_cb_called;
+static int write_cb_error_called;
+typedef struct {
+ uv_write_t req;
+ uv_buf_t buf;
+} write_req_t;
static void connection_cb(uv_stream_t* server, int status) {
int r;
@@ -75,40 +79,49 @@ static void connect_cb(uv_connect_t* req, int status) {
size_t size;
char* data;
int r;
+ write_req_t *wr;
ASSERT(req == &connect_req);
ASSERT(status == 0);
- size = 10*1024*1024;
- data = malloc(size);
- ASSERT(data != NULL);
+ while (1) {
+ size = 10 * 1024 * 1024;
+ data = malloc(size);
+ ASSERT(data != NULL);
- memset(data, '$', size);
- buf = uv_buf_init(data, size);
+ memset(data, '$', size);
+ buf = uv_buf_init(data, size);
- write_req.data = data;
+ wr = (write_req_t*) malloc(sizeof *wr);
+ wr->buf = buf;
+ wr->req.data = data;
- r = uv_write(&write_req, req->handle, &buf, 1, write_cb);
- ASSERT(r == 0);
+ r = uv_write(&(wr->req), req->handle, &wr->buf, 1, write_cb);
+ ASSERT(r == 0);
- /* Write queue should have been updated. */
- ASSERT(req->handle->write_queue_size > 0);
+ if (req->handle->write_queue_size > 0) {
+ /* write_queue_size <= size, part may have already been written. */
+ ASSERT(req->handle->write_queue_size <= size);
- /* write_queue_size <= size, part may have already been written. */
- ASSERT(req->handle->write_queue_size <= size);
+ uv_close((uv_handle_t*)&tcp_client, NULL);
+ break;
+ }
+ }
}
static void write_cb(uv_write_t* req, int status) {
- ASSERT(req == &write_req);
- ASSERT(status == -1);
-
- /* This is what this test is all about. */
- ASSERT(tcp_client.write_queue_size == 0);
+ write_req_t* wr;
+ wr = (write_req_t*) req;
- free(write_req.data);
+ if (status == -1) {
+ /* This is what this test is all about. */
+ ASSERT(tcp_client.write_queue_size == 0);
+ write_cb_error_called++;
+ }
- uv_close((uv_handle_t*)&tcp_client, NULL);
+ free(wr->buf.base);
+ free(wr);
write_cb_called++;
}
@@ -148,7 +161,8 @@ TEST_IMPL(tcp_write_error) {
r = uv_run(loop);
ASSERT(r == 0);
- ASSERT(write_cb_called == 1);
+ ASSERT(write_cb_called > 0);
+ ASSERT(write_cb_error_called == 1);
return 0;
}
--
1.7.4.msysgit.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment