summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/harmony/weakrefs/unregister-before-cleanup.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/harmony/weakrefs/unregister-before-cleanup.js')
-rw-r--r--deps/v8/test/mjsunit/harmony/weakrefs/unregister-before-cleanup.js62
1 files changed, 35 insertions, 27 deletions
diff --git a/deps/v8/test/mjsunit/harmony/weakrefs/unregister-before-cleanup.js b/deps/v8/test/mjsunit/harmony/weakrefs/unregister-before-cleanup.js
index aebcc6a746..082e8cdfe2 100644
--- a/deps/v8/test/mjsunit/harmony/weakrefs/unregister-before-cleanup.js
+++ b/deps/v8/test/mjsunit/harmony/weakrefs/unregister-before-cleanup.js
@@ -4,34 +4,42 @@
// Flags: --expose-gc --noincremental-marking --noincremental-marking
-let cleanup_call_count = 0;
-let cleanup = function(holdings) {
- ++cleanup_call_count;
-}
-
-let fg = new FinalizationRegistry(cleanup);
-let key = {"k": "this is the key"};
-// Create an object and register it in the FinalizationRegistry. The object needs
-// to be inside a closure so that we can reliably kill them!
+(async function () {
+
+ let cleanup_call_count = 0;
+ let cleanup = function (holdings) {
+ ++cleanup_call_count;
+ }
+
+ let fg = new FinalizationRegistry(cleanup);
+ let key = { "k": "this is the key" };
+ // Create an object and register it in the FinalizationRegistry. The object needs
+ // to be inside a closure so that we can reliably kill them!
+
+ (function () {
+ let object = {};
+ fg.register(object, "my holdings", key);
+
+ // Clear the WeakCell before the GC has a chance to discover it.
+ let success = fg.unregister(key);
+ assertTrue(success);
+
+ // object goes out of scope.
+ })();
+
+ // This GC will reclaim the target object.
+ // We need to invoke GC asynchronously and wait for it to finish, so that
+ // it doesn't need to scan the stack. Otherwise, the objects may not be
+ // reclaimed because of conservative stack scanning and the test may not
+ // work as intended.
+ await gc({ type: 'major', execution: 'async' });
+ assertEquals(0, cleanup_call_count);
-(function() {
- let object = {};
- fg.register(object, "my holdings", key);
+ // Assert that the cleanup function won't be called, since we called unregister.
+ let timeout_func = function () {
+ assertEquals(0, cleanup_call_count);
+ }
- // Clear the WeakCell before the GC has a chance to discover it.
- let success = fg.unregister(key);
- assertTrue(success);
+ setTimeout(timeout_func, 0);
- // object goes out of scope.
})();
-
-// This GC will reclaim the target object.
-gc();
-assertEquals(0, cleanup_call_count);
-
-// Assert that the cleanup function won't be called, since we called unregister.
-let timeout_func = function() {
- assertEquals(0, cleanup_call_count);
-}
-
-setTimeout(timeout_func, 0);