diff options
author | Anna Henningsen <anna@addaleax.net> | 2017-09-10 05:05:48 +0200 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-06-06 19:43:41 +0200 |
commit | 5c4d2e60b500a3d093de54b76b17b8f4c52f5da4 (patch) | |
tree | 4cd8c875f0dab12139fd97ac9a7130a7ed19e4be /src/handle_wrap.cc | |
parent | ef25e095e57a6d589f2c6bed661ffaded0c17abd (diff) | |
download | node-new-5c4d2e60b500a3d093de54b76b17b8f4c52f5da4.tar.gz |
src: simplify handle closing
Remove one extra closing state and use a smart pointer for
deleting `HandleWrap`s.
PR-URL: https://github.com/nodejs/node/pull/20876
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Shingo Inoue <leko.noor@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: John-David Dalton <john.david.dalton@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Diffstat (limited to 'src/handle_wrap.cc')
-rw-r--r-- | src/handle_wrap.cc | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/handle_wrap.cc b/src/handle_wrap.cc index 20356b94a5..bbc124ff69 100644 --- a/src/handle_wrap.cc +++ b/src/handle_wrap.cc @@ -67,7 +67,7 @@ void HandleWrap::Close(const FunctionCallbackInfo<Value>& args) { wrap->Close(args[0]); } -void HandleWrap::Close(v8::Local<v8::Value> close_callback) { +void HandleWrap::Close(Local<Value> close_callback) { if (state_ != kInitialized) return; @@ -77,8 +77,7 @@ void HandleWrap::Close(v8::Local<v8::Value> close_callback) { if (!close_callback.IsEmpty() && close_callback->IsFunction()) { object()->Set(env()->context(), env()->onclose_string(), close_callback) - .FromJust(); - state_ = kClosingWithCallback; + .FromMaybe(false); } } @@ -109,24 +108,23 @@ HandleWrap::HandleWrap(Environment* env, void HandleWrap::OnClose(uv_handle_t* handle) { - HandleWrap* wrap = static_cast<HandleWrap*>(handle->data); + std::unique_ptr<HandleWrap> wrap { static_cast<HandleWrap*>(handle->data) }; Environment* env = wrap->env(); HandleScope scope(env->isolate()); Context::Scope context_scope(env->context()); // The wrap object should still be there. CHECK_EQ(wrap->persistent().IsEmpty(), false); - CHECK(wrap->state_ >= kClosing && wrap->state_ <= kClosingWithCallback); + CHECK_EQ(wrap->state_, kClosing); - const bool have_close_callback = (wrap->state_ == kClosingWithCallback); wrap->state_ = kClosed; wrap->OnClose(); - if (have_close_callback) + if (wrap->object()->Has(env->context(), env->onclose_string()) + .FromMaybe(false)) { wrap->MakeCallback(env->onclose_string(), 0, nullptr); - - delete wrap; + } } |