@@ -20,12 +20,12 @@ ReqWrap<T>::ReqWrap(Environment* env,
20
20
AsyncWrap::ProviderType provider)
21
21
: AsyncWrap(env, object, provider),
22
22
ReqWrapBase (env) {
23
+ MakeWeak ();
23
24
Reset ();
24
25
}
25
26
26
27
template <typename T>
27
28
ReqWrap<T>::~ReqWrap () {
28
- CHECK_EQ (false , persistent ().IsEmpty ());
29
29
}
30
30
31
31
template <typename T>
@@ -121,6 +121,7 @@ struct MakeLibuvRequestCallback<ReqT, void(*)(ReqT*, Args...)> {
121
121
122
122
static void Wrapper (ReqT* req, Args... args) {
123
123
ReqWrap<ReqT>* req_wrap = ReqWrap<ReqT>::from_req (req);
124
+ req_wrap->MakeWeak ();
124
125
req_wrap->env ()->DecreaseWaitingRequestCounter ();
125
126
F original_callback = reinterpret_cast <F>(req_wrap->original_callback_ );
126
127
original_callback (req, args...);
@@ -138,7 +139,6 @@ template <typename T>
138
139
template <typename LibuvFunction, typename ... Args>
139
140
int ReqWrap<T>::Dispatch(LibuvFunction fn, Args... args) {
140
141
Dispatched ();
141
-
142
142
// This expands as:
143
143
//
144
144
// int err = fn(env()->event_loop(), req(), arg1, arg2, Wrapper, arg3, ...)
@@ -158,8 +158,10 @@ int ReqWrap<T>::Dispatch(LibuvFunction fn, Args... args) {
158
158
env ()->event_loop (),
159
159
req (),
160
160
MakeLibuvRequestCallback<T, Args>::For (this , args)...);
161
- if (err >= 0 )
161
+ if (err >= 0 ) {
162
+ ClearWeak ();
162
163
env ()->IncreaseWaitingRequestCounter ();
164
+ }
163
165
return err;
164
166
}
165
167
0 commit comments