about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorekoby <7406535+ekoby@users.noreply.github.com>2023-01-02 11:11:29 -0500
committerGitHub <noreply@github.com>2023-01-02 11:11:29 -0500
commit07105c196d3084be87597ace2a4e03dc90090a8a (patch)
tree9b789b57d5d9594f5d201de76e646bd64cc27577
parent784379dcc3294b9682b625805187ac0fdd8a08f0 (diff)
parent8cb4515e530ee46dbfb314320b3e4d93c27e7c97 (diff)
downloaduv_link_t-07105c196d3084be87597ace2a4e03dc90090a8a.tar.gz
Merge pull request #2 from netfoundry/fix-crash-on-close-without-src
fix crashes when close() is called without stream set
-rw-r--r--src/uv_link_source_t.c19
1 files changed, 14 insertions, 5 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);
+  }
 }