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 */
wr = (write_req_t*) req;
free(wr->buf.base);
if (status == 0) {
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);
}
fprintf(stderr,
"uv_write error: %s - %s\n",
uv_err_name(status),
uv_strerror(status));
static void after_shutdown(uv_shutdown_t* req, int status) {
if (!uv_is_closing((uv_handle_t*) req->handle))
uv_close((uv_handle_t*) req->handle, on_close);
free(req);
free(wr);
}
@ -77,7 +73,6 @@ static void after_read(uv_stream_t* handle,
const uv_buf_t* buf) {
int i;
write_req_t *wr;
uv_shutdown_t* req;
if (nread < 0) {
/* Error or EOF */
@ -87,9 +82,7 @@ static void after_read(uv_stream_t* handle,
free(buf->base);
}
req = (uv_shutdown_t*) malloc(sizeof *req);
uv_shutdown(req, handle, after_shutdown);
uv_close((uv_handle_t*) handle, on_close);
return;
}