diff options
author | Anna Henningsen <anna@addaleax.net> | 2018-03-24 23:12:22 +0100 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-05-14 19:19:32 +0200 |
commit | 7153bec9552438227e76dc1f51e84fb34ec841ff (patch) | |
tree | c74d1c2f43e7196a00b0a08f7a80dc295bfd0429 | |
parent | 61415dccc4ba9ecba45dafad1d2612279f389617 (diff) | |
download | node-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.h | 3 | ||||
-rw-r--r-- | src/stream_wrap.cc | 5 | ||||
-rw-r--r-- | src/stream_wrap.h | 2 |
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, |