@@ -20,13 +20,12 @@ ReqWrap<T>::ReqWrap(Environment* env,
2020 AsyncWrap::ProviderType provider)
2121 : AsyncWrap(env, object, provider),
2222 ReqWrapBase (env) {
23+ MakeWeak ();
2324 Reset ();
2425}
2526
2627template <typename T>
27- ReqWrap<T>::~ReqWrap () {
28- CHECK_EQ (false , persistent ().IsEmpty ());
29- }
28+ ReqWrap<T>::~ReqWrap () {}
3029
3130template <typename T>
3231void ReqWrap<T>::Dispatched() {
@@ -120,7 +119,8 @@ struct MakeLibuvRequestCallback<ReqT, void(*)(ReqT*, Args...)> {
120119 using F = void (*)(ReqT* req, Args... args);
121120
122121 static void Wrapper (ReqT* req, Args... args) {
123- ReqWrap<ReqT>* req_wrap = ReqWrap<ReqT>::from_req (req);
122+ BaseObjectPtr<ReqWrap<ReqT>> req_wrap{ReqWrap<ReqT>::from_req (req)};
123+ req_wrap->Detach ();
124124 req_wrap->env ()->DecreaseWaitingRequestCounter ();
125125 F original_callback = reinterpret_cast <F>(req_wrap->original_callback_ );
126126 original_callback (req, args...);
@@ -138,7 +138,6 @@ template <typename T>
138138template <typename LibuvFunction, typename ... Args>
139139int ReqWrap<T>::Dispatch(LibuvFunction fn, Args... args) {
140140 Dispatched ();
141-
142141 // This expands as:
143142 //
144143 // int err = fn(env()->event_loop(), req(), arg1, arg2, Wrapper, arg3, ...)
@@ -158,8 +157,10 @@ int ReqWrap<T>::Dispatch(LibuvFunction fn, Args... args) {
158157 env ()->event_loop (),
159158 req (),
160159 MakeLibuvRequestCallback<T, Args>::For (this , args)...);
161- if (err >= 0 )
160+ if (err >= 0 ) {
161+ ClearWeak ();
162162 env ()->IncreaseWaitingRequestCounter ();
163+ }
163164 return err;
164165}
165166
0 commit comments