diff options
author | Fedor Indutny <fedor@indutny.com> | 2016-06-03 14:52:38 -0400 |
---|---|---|
committer | Fedor Indutny <fedor@indutny.com> | 2016-06-03 14:52:38 -0400 |
commit | 201448c9bbd6a143e0ad04b4961bd856eb6b5012 (patch) | |
tree | faa3efdb7785c1cc6953d67214028db6e39d6dd0 /src | |
parent | 88ffbdbebace7624f934e91c97731f18f3f8ee03 (diff) | |
download | uv_link_t-201448c9bbd6a143e0ad04b4961bd856eb6b5012.tar.gz |
src: error or NULL links they happen on close
Right after `uv_link_close()` all links will be unchained, meaning that they `link->parent` is NULL. Instead of crashing on calls like: `uv_link_try_write(link->parent, ...)` Make them return `UV_EFAULT`, indicating that no parent is present anymore. Alternatively, these checks could be done in user code, but it will make it too cumbersome.
Diffstat (limited to 'src')
-rw-r--r-- | src/uv_link_t.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/uv_link_t.c b/src/uv_link_t.c index 32fa6c9..64ca70d 100644 --- a/src/uv_link_t.c +++ b/src/uv_link_t.c @@ -50,6 +50,8 @@ int uv_link_propagate_write(uv_link_t* link, uv_link_t* source, const uv_buf_t bufs[], unsigned int nbufs, uv_stream_t* send_handle, uv_link_write_cb cb, void* arg) { + if (link == NULL) + return UV_EFAULT; CLOSE_WRAP(link->methods->write(link, source, bufs, nbufs, send_handle, cb, arg)); } @@ -59,16 +61,22 @@ int uv_link_propagate_shutdown(uv_link_t* link, uv_link_t* source, uv_link_shutdown_cb cb, void* arg) { + if (link == NULL) + return UV_EFAULT; CLOSE_WRAP(link->methods->shutdown(link, source, cb, arg)); } int uv_link_read_start(uv_link_t* link) { + if (link == NULL) + return UV_EFAULT; CLOSE_WRAP(link->methods->read_start(link)); } int uv_link_read_stop(uv_link_t* link) { + if (link == NULL) + return UV_EFAULT; CLOSE_WRAP(link->methods->read_stop(link)); } @@ -76,6 +84,8 @@ int uv_link_read_stop(uv_link_t* link) { int uv_link_try_write(uv_link_t* link, const uv_buf_t bufs[], unsigned int nbufs) { + if (link == NULL) + return UV_EFAULT; CLOSE_WRAP(link->methods->try_write(link, bufs, nbufs)); } |