defaults: stop reading on error

This commit is contained in:
Fedor Indutny 2016-06-04 10:33:26 -04:00
parent d7e448cd03
commit 41a0b873de
4 changed files with 49 additions and 0 deletions

View File

@ -20,6 +20,10 @@ static void uv_link_def_read_cb(uv_link_t* link,
const uv_buf_t* buf) {
if (buf != NULL)
free(buf->base);
/* Stop reading on error */
if (nread < 0)
uv_link_read_stop(link);
}

43
test/src/test-defaults.c Normal file
View File

@ -0,0 +1,43 @@
#include <sys/socket.h>
#include <unistd.h>
#include "test-common.h"
static uv_link_t st_link;
static int reading;
static int close_cb_called;
static int read_start(uv_link_t* link) {
reading++;
return 0;
}
static int read_stop(uv_link_t* link) {
reading--;
return 0;
}
static uv_link_methods_t methods = {
.read_start = read_start,
.read_stop = read_stop,
.close = uv_link_default_close
};
static void close_cb(uv_link_t* l) {
close_cb_called++;
}
TEST_IMPL(stop_read_on_error) {
CHECK_EQ(uv_link_init(&st_link, &methods), 0, "uv_link_init()");
CHECK_EQ(uv_link_read_start(&st_link), 0, "uv_link_read_start()");
uv_link_propagate_read_cb(&st_link, UV_EOF, NULL);
CHECK_EQ(reading, 0, "must not be reading after error");
uv_link_close(&st_link, close_cb);
CHECK_EQ(close_cb_called, 1, "close_cb must be called");
}

View File

@ -5,6 +5,7 @@
V(uv_link_source_t) \
V(uv_link_observer_t) \
V(close_depth) \
V(stop_read_on_error) \
#define TEST_DECL(N) void test__##N();

View File

@ -16,6 +16,7 @@
"src/main.c",
"src/test-uv-link-source-t.c",
"src/test-uv-link-observer-t.c",
"src/test-defaults.c",
"src/test-close.c",
],
}],