From 46a5dd02568cec0866fb29aebec6333cd84345ea Mon Sep 17 00:00:00 2001 From: Kevin McNee Date: Fri, 3 Feb 2023 20:05:20 -0500 Subject: [PATCH] Create a MicrotasksScope for async GC When running the async version of window.gc() (e.g. window.gc({type: 'major', execution: 'async'})), the promise is resolved without a MicrotasksScope, causing us to hit a DCHECK. Change-Id: I10f72c96605263afacc01afbfcc56d1134d84b43 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4220146 Reviewed-by: Michael Lippautz Commit-Queue: Kevin McNee Cr-Commit-Position: refs/heads/main@{#85698} --- src/extensions/gc-extension.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/extensions/gc-extension.cc b/src/extensions/gc-extension.cc index 98cfe7f14f..16fdeb457b 100644 --- a/src/extensions/gc-extension.cc +++ b/src/extensions/gc-extension.cc @@ -5,6 +5,7 @@ #include "src/extensions/gc-extension.h" #include "include/v8-isolate.h" +#include "include/v8-microtask-queue.h" #include "include/v8-object.h" #include "include/v8-persistent-handle.h" #include "include/v8-primitive.h" @@ -121,6 +122,8 @@ class AsyncGC final : public CancelableTask { InvokeGC(isolate_, ExecutionType::kAsync, type_); auto resolver = v8::Local::New(isolate_, resolver_); auto ctx = Local::New(isolate_, ctx_); + v8::MicrotasksScope microtasks_scope( + ctx, v8::MicrotasksScope::kDoNotRunMicrotasks); resolver->Resolve(ctx, v8::Undefined(isolate_)).ToChecked(); }