diff --git a/src/handle_wrap.cc b/src/handle_wrap.cc index 8ed6b2948dffd9..888640e9493d8e 100644 --- a/src/handle_wrap.cc +++ b/src/handle_wrap.cc @@ -72,11 +72,11 @@ void HandleWrap::Close(Local 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(); diff --git a/test/sequential/test-performance-eventloopdelay.js b/test/sequential/test-performance-eventloopdelay.js index 82f47b6fb29c47..7b9527b3863905 100644 --- a/test/sequential/test-performance-eventloopdelay.js +++ b/test/sequential/test-performance-eventloopdelay.js @@ -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);