@@ -67,7 +67,7 @@ void HandleWrap::Close(const FunctionCallbackInfo<Value>& args) {
67
67
wrap->Close (args[0 ]);
68
68
}
69
69
70
- void HandleWrap::Close (v8:: Local<v8:: Value> close_callback) {
70
+ void HandleWrap::Close (Local<Value> close_callback) {
71
71
if (state_ != kInitialized )
72
72
return ;
73
73
@@ -77,8 +77,7 @@ void HandleWrap::Close(v8::Local<v8::Value> close_callback) {
77
77
78
78
if (!close_callback.IsEmpty () && close_callback->IsFunction ()) {
79
79
object ()->Set (env ()->context (), env ()->onclose_string (), close_callback)
80
- .FromJust ();
81
- state_ = kClosingWithCallback ;
80
+ .FromMaybe (false );
82
81
}
83
82
}
84
83
@@ -109,24 +108,23 @@ HandleWrap::HandleWrap(Environment* env,
109
108
110
109
111
110
void HandleWrap::OnClose (uv_handle_t * handle) {
112
- HandleWrap* wrap = static_cast <HandleWrap*>(handle->data );
111
+ std::unique_ptr< HandleWrap> wrap { static_cast <HandleWrap*>(handle->data ) } ;
113
112
Environment* env = wrap->env ();
114
113
HandleScope scope (env->isolate ());
115
114
Context::Scope context_scope (env->context ());
116
115
117
116
// The wrap object should still be there.
118
117
CHECK_EQ (wrap->persistent ().IsEmpty (), false );
119
- CHECK (wrap->state_ >= kClosing && wrap-> state_ <= kClosingWithCallback );
118
+ CHECK_EQ (wrap->state_ , kClosing );
120
119
121
- const bool have_close_callback = (wrap->state_ == kClosingWithCallback );
122
120
wrap->state_ = kClosed ;
123
121
124
122
wrap->OnClose ();
125
123
126
- if (have_close_callback)
124
+ if (wrap->object ()->Has (env->context (), env->onclose_string ())
125
+ .FromMaybe (false )) {
127
126
wrap->MakeCallback (env->onclose_string (), 0 , nullptr );
128
-
129
- delete wrap;
127
+ }
130
128
}
131
129
132
130
0 commit comments