summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2018-03-24 23:12:22 +0100
committerAnna Henningsen <anna@addaleax.net>2018-05-14 19:19:32 +0200
commit7153bec9552438227e76dc1f51e84fb34ec841ff (patch)
treec74d1c2f43e7196a00b0a08f7a80dc295bfd0429
parent61415dccc4ba9ecba45dafad1d2612279f389617 (diff)
downloadnode-new-7153bec9552438227e76dc1f51e84fb34ec841ff.tar.gz
src: always call ReadStop() before Close()
For libuv-backed streams, always explicitly stop reading before closing the handle. PR-URL: https://github.com/nodejs/node/pull/19377 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--src/handle_wrap.h3
-rw-r--r--src/stream_wrap.cc5
-rw-r--r--src/stream_wrap.h2
3 files changed, 9 insertions, 1 deletions
diff --git a/src/handle_wrap.h b/src/handle_wrap.h
index fd2d002dce..b2b09f5010 100644
--- a/src/handle_wrap.h
+++ b/src/handle_wrap.h
@@ -70,7 +70,8 @@ class HandleWrap : public AsyncWrap {
inline uv_handle_t* GetHandle() const { return handle_; }
- void Close(v8::Local<v8::Value> close_callback = v8::Local<v8::Value>());
+ virtual void Close(
+ v8::Local<v8::Value> close_callback = v8::Local<v8::Value>());
protected:
HandleWrap(Environment* env,
diff --git a/src/stream_wrap.cc b/src/stream_wrap.cc
index 0e700ba39a..cdcbe574f9 100644
--- a/src/stream_wrap.cc
+++ b/src/stream_wrap.cc
@@ -373,6 +373,11 @@ void LibuvStreamWrap::AfterUvWrite(uv_write_t* req, int status) {
req_wrap->Done(status);
}
+void LibuvStreamWrap::Close(v8::Local<v8::Value> close_callback) {
+ ReadStop();
+ HandleWrap::Close(close_callback);
+}
+
} // namespace node
NODE_BUILTIN_MODULE_CONTEXT_AWARE(stream_wrap,
diff --git a/src/stream_wrap.h b/src/stream_wrap.h
index 7847ebe754..94a161b6d5 100644
--- a/src/stream_wrap.h
+++ b/src/stream_wrap.h
@@ -76,6 +76,8 @@ class LibuvStreamWrap : public HandleWrap, public StreamBase {
ShutdownWrap* CreateShutdownWrap(v8::Local<v8::Object> object) override;
WriteWrap* CreateWriteWrap(v8::Local<v8::Object> object) override;
+ void Close(v8::Local<v8::Value> close_callback) override;
+
protected:
LibuvStreamWrap(Environment* env,
v8::Local<v8::Object> object,