From e67df04df299a09af661f58508563ad8d3fa0e6b Mon Sep 17 00:00:00 2001 From: James M Snell Date: Mon, 27 Apr 2020 13:01:13 -0700 Subject: [PATCH] src: use BaseObjectPtr in StreamReq::Dispose Allow the AsyncWrap to be properly detached. Extracted from the [QUIC PR](https://github.com/nodejs/node/pull/32379). Signed-off-by: James M Snell PR-URL: https://github.com/nodejs/node/pull/33102 Refs: https://github.com/nodejs/node/pull/32379/files?file-filters%5B%5D=.bat&file-filters%5B%5D=.gyp&file-filters%5B%5D=.gypi&file-filters%5B%5D=.h&file-filters%5B%5D=.md&file-filters%5B%5D=.py&file-filters%5B%5D=.sh&file-filters%5B%5D=No+extension&file-filters%5B%5D=dotfile#r409084763 Reviewed-By: Anna Henningsen --- src/stream_base-inl.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/stream_base-inl.h b/src/stream_base-inl.h index ef7a5e4c7a87f2..dd80683af10d08 100644 --- a/src/stream_base-inl.h +++ b/src/stream_base-inl.h @@ -4,6 +4,7 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include "async_wrap-inl.h" +#include "base_object-inl.h" #include "node.h" #include "stream_base.h" #include "v8.h" @@ -36,9 +37,10 @@ inline StreamReq* StreamReq::FromObject(v8::Local req_wrap_obj) { } inline void StreamReq::Dispose() { + BaseObjectPtr destroy_me{GetAsyncWrap()}; object()->SetAlignedPointerInInternalField( StreamReq::kStreamReqField, nullptr); - delete this; + destroy_me->Detach(); } inline v8::Local StreamReq::object() {