summaryrefslogtreecommitdiff
path: root/src/handle_wrap.cc
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2017-09-10 05:05:48 +0200
committerAnna Henningsen <anna@addaleax.net>2018-06-06 19:43:41 +0200
commit5c4d2e60b500a3d093de54b76b17b8f4c52f5da4 (patch)
tree4cd8c875f0dab12139fd97ac9a7130a7ed19e4be /src/handle_wrap.cc
parentef25e095e57a6d589f2c6bed661ffaded0c17abd (diff)
downloadnode-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.cc16
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;
+ }
}