src: forbid handle allocations from Platform tasks

Platform tasks should have their own handle scopes, rather than
leak into outer ones.

PR-URL: https://github.com/nodejs/node/pull/26376
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Anna Henningsen 2019-02-24 22:05:44 +01:00
parent 753ebd742f
commit 820ae61c12
No known key found for this signature in database
GPG Key ID: 9C63F3A6CD2AD8F9
2 changed files with 12 additions and 2 deletions

View File

@ -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);

View File

@ -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> 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<Object>(), { 0, 0 },