src: fix closing weak HandleWraps on GC

In 0af62aae07ccbb3783030367ffe4, this was overlooked, with it
possibly leading to hard crashes.

Refs: https://github.com/nodejs/node/pull/29317

PR-URL: https://github.com/nodejs/node/pull/29640
Reviewed-By: Ben Coe <bencoe@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
Anna Henningsen 2019-09-21 02:15:32 +02:00 committed by Benjamin Coe
parent f634f37be0
commit e74f30894c
No known key found for this signature in database
GPG Key ID: 84D97FAF3C07DF69
2 changed files with 7 additions and 2 deletions

View File

@ -72,11 +72,11 @@ void HandleWrap::Close(Local<Value> close_callback) {
if (state_ != kInitialized)
return;
CHECK_EQ(false, persistent().IsEmpty());
uv_close(handle_, OnClose);
state_ = kClosing;
if (!close_callback.IsEmpty() && close_callback->IsFunction()) {
if (!close_callback.IsEmpty() && close_callback->IsFunction() &&
!persistent().IsEmpty()) {
object()->Set(env()->context(),
env()->handle_onclose_symbol(),
close_callback).Check();

View File

@ -1,3 +1,4 @@
// Flags: --expose-gc
'use strict';
const common = require('../common');
@ -97,3 +98,7 @@ const {
}
spinAWhile();
}
// Make sure that the histogram instances can be garbage-collected without
// and not just implictly destroyed when the Environment is torn down.
process.on('exit', global.gc);