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>
This commit is contained in:
Anna Henningsen 2018-03-24 23:12:22 +01:00
parent 5d70459606
commit 2b3150466e
No known key found for this signature in database
GPG Key ID: 9C63F3A6CD2AD8F9
3 changed files with 9 additions and 1 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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,