@@ -163,8 +163,11 @@ inline int StreamBase::Shutdown(v8::Local<v8::Object> req_wrap_obj) {
163163 StreamReq::ResetObject (req_wrap_obj);
164164 }
165165
166+ BaseObjectPtr<AsyncWrap> req_wrap_ptr;
166167 AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope (GetAsyncWrap ());
167168 ShutdownWrap* req_wrap = CreateShutdownWrap (req_wrap_obj);
169+ if (req_wrap != nullptr )
170+ req_wrap_ptr.reset (req_wrap->GetAsyncWrap ());
168171 int err = DoShutdown (req_wrap);
169172
170173 if (err != 0 && req_wrap != nullptr ) {
@@ -198,7 +201,7 @@ inline StreamWriteResult StreamBase::Write(
198201 if (send_handle == nullptr ) {
199202 err = DoTryWrite (&bufs, &count);
200203 if (err != 0 || count == 0 ) {
201- return StreamWriteResult { false , err, nullptr , total_bytes };
204+ return StreamWriteResult { false , err, nullptr , total_bytes, {} };
202205 }
203206 }
204207
@@ -208,13 +211,14 @@ inline StreamWriteResult StreamBase::Write(
208211 if (!env->write_wrap_template ()
209212 ->NewInstance (env->context ())
210213 .ToLocal (&req_wrap_obj)) {
211- return StreamWriteResult { false , UV_EBUSY , nullptr , 0 };
214+ return StreamWriteResult { false , UV_EBUSY , nullptr , 0 , {} };
212215 }
213216 StreamReq::ResetObject (req_wrap_obj);
214217 }
215218
216219 AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope (GetAsyncWrap ());
217220 WriteWrap* req_wrap = CreateWriteWrap (req_wrap_obj);
221+ BaseObjectPtr<AsyncWrap> req_wrap_ptr (req_wrap->GetAsyncWrap ());
218222
219223 err = DoWrite (req_wrap, bufs, count, send_handle);
220224 bool async = err == 0 ;
@@ -232,7 +236,8 @@ inline StreamWriteResult StreamBase::Write(
232236 ClearError ();
233237 }
234238
235- return StreamWriteResult { async, err, req_wrap, total_bytes };
239+ return StreamWriteResult {
240+ async, err, req_wrap, total_bytes, std::move (req_wrap_ptr) };
236241}
237242
238243template <typename OtherBase>
0 commit comments