diff options
author | latex <latex@disroot.org> | 2023-02-01 15:19:24 +0100 |
---|---|---|
committer | latex <latex@disroot.org> | 2023-02-01 15:19:24 +0100 |
commit | 8b90c9e2cad93118e394efe3ce60be1b29d3b769 (patch) | |
tree | 50006c8d557da3f4697c5e85ab51b3814f75dc11 | |
parent | c7b869f661475903ef5e656dfbf9f30915d2ff50 (diff) | |
parent | 07105c196d3084be87597ace2a4e03dc90090a8a (diff) | |
download | uv_link_t-8b90c9e2cad93118e394efe3ce60be1b29d3b769.tar.gz |
Merge remote-tracking branch 'netfoundry/master'
-rw-r--r-- | src/uv_link_source_t.c | 19 | ||||
-rw-r--r-- | src/uv_link_t.c | 3 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/uv_link_source_t.c b/src/uv_link_source_t.c index 96fc937..7907d65 100644 --- a/src/uv_link_source_t.c +++ b/src/uv_link_source_t.c @@ -143,7 +143,11 @@ static void uv_link_source_close_cb(uv_handle_t* handle) { source = handle->data; source->stream = NULL; - source->close_cb(source->close_source); + if (source->close_cb) { + source->close_cb(source->close_source); + } + source->close_cb = NULL; + source->close_source = NULL; } @@ -153,10 +157,15 @@ static void uv_link_source_close(uv_link_t* link, uv_link_t* source, s = (uv_link_source_t*) link; - s->close_cb = cb; - s->close_source = source; - - uv_close((uv_handle_t*) s->stream, uv_link_source_close_cb); + if (s->stream) { + if (!uv_is_closing((const uv_handle_t *) s->stream)) { + s->close_cb = cb; + s->close_source = source; + uv_close((uv_handle_t *) s->stream, uv_link_source_close_cb); + } + } else { + cb(source); + } } diff --git a/src/uv_link_t.c b/src/uv_link_t.c index 32c676e..78ada82 100644 --- a/src/uv_link_t.c +++ b/src/uv_link_t.c @@ -101,7 +101,8 @@ int uv_link_read_start(uv_link_t* link) { int uv_link_read_stop(uv_link_t* link) { if (link == NULL) return uv_link_error(link, UV_EFAULT); - CLOSE_WRAP(link->methods->read_stop(link)); + if (NULL != link->methods->read_stop) + CLOSE_WRAP(link->methods->read_stop(link)); } |