summaryrefslogtreecommitdiff
path: root/src/stream_base-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/stream_base-inl.h')
-rw-r--r--src/stream_base-inl.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/stream_base-inl.h b/src/stream_base-inl.h
index 7523b3a545..f4c228d7c5 100644
--- a/src/stream_base-inl.h
+++ b/src/stream_base-inl.h
@@ -164,8 +164,9 @@ inline int StreamBase::Shutdown(v8::Local<v8::Object> req_wrap_obj) {
if (req_wrap_obj.IsEmpty()) {
req_wrap_obj =
- env->shutdown_wrap_constructor_function()
+ env->shutdown_wrap_template()
->NewInstance(env->context()).ToLocalChecked();
+ StreamReq::ResetObject(req_wrap_obj);
}
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(GetAsyncWrap());
@@ -203,8 +204,9 @@ inline StreamWriteResult StreamBase::Write(
if (req_wrap_obj.IsEmpty()) {
req_wrap_obj =
- env->write_wrap_constructor_function()
+ env->write_wrap_template()
->NewInstance(env->context()).ToLocalChecked();
+ StreamReq::ResetObject(req_wrap_obj);
}
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(GetAsyncWrap());
@@ -427,6 +429,15 @@ inline void StreamReq::Done(int status, const char* error_str) {
OnDone(status);
}
+inline void StreamReq::ResetObject(v8::Local<v8::Object> obj) {
+#ifdef DEBUG
+ CHECK_GT(obj->InternalFieldCount(), StreamReq::kStreamReqField);
+#endif
+ ClearWrap(obj);
+ obj->SetAlignedPointerInInternalField(StreamReq::kStreamReqField, nullptr);
+}
+
+
} // namespace node
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS