diff --git a/src/inspector/main_thread_interface.cc b/src/inspector/main_thread_interface.cc index c58ea4cb4108be..14f90fbd9d3a6c 100644 --- a/src/inspector/main_thread_interface.cc +++ b/src/inspector/main_thread_interface.cc @@ -268,6 +268,14 @@ void MainThreadInterface::DispatchMessages() { MessageQueue::value_type task; std::swap(dispatching_message_queue_.front(), task); dispatching_message_queue_.pop_front(); + + // TODO(addaleax): The V8 inspector code currently sometimes allocates + // handles that leak to the outside scope, rendering a HandleScope here + // necessary. This handle scope can be removed/turned into a + // SealHandleScope once/if + // https://chromium-review.googlesource.com/c/v8/v8/+/1484304 makes it + // into our copy of V8, maybe guarded with #ifdef DEBUG if we want. + v8::HandleScope handle_scope(isolate_); task->Call(this); } } while (had_messages); diff --git a/src/node_platform.cc b/src/node_platform.cc index 9b1c4b4ca9bebd..115b59e356cf46 100644 --- a/src/node_platform.cc +++ b/src/node_platform.cc @@ -8,11 +8,11 @@ namespace node { -using v8::HandleScope; using v8::Isolate; using v8::Local; using v8::Object; using v8::Platform; +using v8::SealHandleScope; using v8::Task; using node::tracing::TracingController; @@ -332,7 +332,9 @@ int NodePlatform::NumberOfWorkerThreads() { void PerIsolatePlatformData::RunForegroundTask(std::unique_ptr task) { Isolate* isolate = Isolate::GetCurrent(); - HandleScope scope(isolate); +#ifdef DEBUG + SealHandleScope scope(isolate); +#endif Environment* env = Environment::GetCurrent(isolate); if (env != nullptr) { InternalCallbackScope cb_scope(env, Local(), { 0, 0 },