test: close stream immediately on error

If there is an error in the uv_read_cb, close the uv_stream_t
immediately instead of waiting until the uv_write_cb, and only close the
stream in after_write() if it hasn't been closed already.
This commit is contained in:
Trevor Norris 2014-04-22 15:44:02 -07:00
parent 76eb7518c6
commit 4d905fbe07

View File

@ -51,24 +51,20 @@ static void after_write(uv_write_t* req, int status) {
/* Free the read/write buffer and the request */ /* Free the read/write buffer and the request */
wr = (write_req_t*) req; wr = (write_req_t*) req;
free(wr->buf.base); free(wr->buf.base);
if (status == 0) {
free(wr);
return;
}
fprintf(stderr,
"uv_write error: %s - %s\n",
uv_err_name(status),
uv_strerror(status));
if (!uv_is_closing((uv_handle_t*) req->handle))
uv_close((uv_handle_t*) req->handle, on_close);
free(wr); free(wr);
if (status == 0)
return;
fprintf(stderr, "uv_write error: %s\n", uv_strerror(status));
if (status == UV_ECANCELED)
return;
ASSERT(status == UV_EPIPE);
uv_close((uv_handle_t*)req->handle, on_close);
}
static void after_shutdown(uv_shutdown_t* req, int status) {
uv_close((uv_handle_t*)req->handle, on_close);
free(req);
} }
@ -77,7 +73,6 @@ static void after_read(uv_stream_t* handle,
const uv_buf_t* buf) { const uv_buf_t* buf) {
int i; int i;
write_req_t *wr; write_req_t *wr;
uv_shutdown_t* req;
if (nread < 0) { if (nread < 0) {
/* Error or EOF */ /* Error or EOF */
@ -87,9 +82,7 @@ static void after_read(uv_stream_t* handle,
free(buf->base); free(buf->base);
} }
req = (uv_shutdown_t*) malloc(sizeof *req); uv_close((uv_handle_t*) handle, on_close);
uv_shutdown(req, handle, after_shutdown);
return; return;
} }