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:
parent
76eb7518c6
commit
4d905fbe07
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user