From f735620797e8c5494f53233a94077b267af20180 Mon Sep 17 00:00:00 2001 From: Edy Silva <edigleyssonsilva@gmail.com> Date: Wed, 11 Dec 2024 10:05:16 -0300 Subject: [PATCH] test: fix test-abortsignal-drop-settled-signals flakiness --- .../test-abortsignal-drop-settled-signals.mjs | 39 ++++++++----------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/test/parallel/test-abortsignal-drop-settled-signals.mjs b/test/parallel/test-abortsignal-drop-settled-signals.mjs index f829fb0a9173fa..2bff3a3e063057 100644 --- a/test/parallel/test-abortsignal-drop-settled-signals.mjs +++ b/test/parallel/test-abortsignal-drop-settled-signals.mjs @@ -1,6 +1,7 @@ // Flags: --expose_gc // import '../common/index.mjs'; +import { gcUntil } from '../common/gc.js'; import { describe, it } from 'node:test'; function makeSubsequentCalls(limit, done, holdReferences = false) { @@ -141,37 +142,29 @@ it('drops settled dependant signals when signal is composite', (t, done) => { ); setImmediate(() => { - global.gc(); + global.gc({ execution: 'async' }).then(() => { + t.assert.strictEqual(composedSignalRef.deref(), undefined); + t.assert.strictEqual(controllers[0].signal[kDependantSignals].size, 2); + t.assert.strictEqual(controllers[1].signal[kDependantSignals].size, 1); - t.assert.strictEqual(composedSignalRef.deref(), undefined); - t.assert.strictEqual(controllers[0].signal[kDependantSignals].size, 2); - t.assert.strictEqual(controllers[1].signal[kDependantSignals].size, 1); - - setImmediate(() => { - t.assert.strictEqual(controllers[0].signal[kDependantSignals].size, 0); - t.assert.strictEqual(controllers[1].signal[kDependantSignals].size, 0); + setImmediate(() => { + t.assert.strictEqual(controllers[0].signal[kDependantSignals].size, 0); + t.assert.strictEqual(controllers[1].signal[kDependantSignals].size, 0); - done(); + done(); + }); }); }); }); it('drops settled signals even when there are listeners', (t, done) => { - runWithOrphanListeners(limit, (signalRefs) => { - setImmediate(() => { - global.gc(); - setImmediate(() => { - global.gc(); // One more call needed to clean up the deeper composed signals - setImmediate(() => { - global.gc(); // One more call needed to clean up the deeper composed signals - - const unGCedSignals = [...signalRefs].filter((ref) => ref.deref()); - - t.assert.strictEqual(unGCedSignals.length, 0); + runWithOrphanListeners(limit, async (signalRefs) => { + await gcUntil('all signals are GCed', () => { + const unGCedSignals = [...signalRefs].filter((ref) => ref.deref()); - done(); - }); - }); + return unGCedSignals.length === 0; }); + + done(); }); });