[weakrefs] Fix [[KeptObjects]] assertion for only when a microtask checkpoint is performed

Bug: chromium:1073263
Change-Id: I5c054e34242a91dafd6788814a39e97075d1035d
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2160019
Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
Commit-Queue: Shu-yu Guo <syg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#67319}
This commit is contained in:
Shu-yu Guo 2020-04-21 18:07:42 -07:00 committed by Commit Bot
parent 3a8feabfd7
commit 4e1544bcff
2 changed files with 14 additions and 0 deletions

View File

@ -328,6 +328,7 @@ class CallDepthScope {
bool CheckKeptObjectsClearedAfterMicrotaskCheckpoint(
i::MicrotaskQueue* microtask_queue) {
bool did_perform_microtask_checkpoint =
isolate_->thread_local_top()->CallDepthIsZero() &&
do_callback && microtask_queue &&
microtask_queue->microtasks_policy() == MicrotasksPolicy::kAuto;
return !did_perform_microtask_checkpoint ||

View File

@ -0,0 +1,13 @@
// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --harmony-weak-refs
// A newly created WeakRef is kept alive until the end of the next microtask
// checkpoint. V8 asserts that the kept objects list is cleared at the end of
// microtask checkpoints when the microtask policy is auto. Test that d8, which
// uses the auto policy, upholds the assert when manually quitting.
let obj = {};
let wr = new WeakRef(obj);
testRunner.quit();