test: fix test-abortsignal-drop-settled-signals flakiness · nodejs/node@8288f57

11

// Flags: --expose_gc

22

//

33

import '../common/index.mjs';

4+

import { gcUntil } from '../common/gc.js';

45

import { describe, it } from 'node:test';

5667

function makeSubsequentCalls(limit, done, holdReferences = false) {

@@ -141,37 +142,29 @@ it('drops settled dependant signals when signal is composite', (t, done) => {

141142

);

142143143144

setImmediate(() => {

144-

global.gc();

145+

global.gc({ execution: 'async' }).then(() => {

146+

t.assert.strictEqual(composedSignalRef.deref(), undefined);

147+

t.assert.strictEqual(controllers[0].signal[kDependantSignals].size, 2);

148+

t.assert.strictEqual(controllers[1].signal[kDependantSignals].size, 1);

145149146-

t.assert.strictEqual(composedSignalRef.deref(), undefined);

147-

t.assert.strictEqual(controllers[0].signal[kDependantSignals].size, 2);

148-

t.assert.strictEqual(controllers[1].signal[kDependantSignals].size, 1);

149-150-

setImmediate(() => {

151-

t.assert.strictEqual(controllers[0].signal[kDependantSignals].size, 0);

152-

t.assert.strictEqual(controllers[1].signal[kDependantSignals].size, 0);

150+

setImmediate(() => {

151+

t.assert.strictEqual(controllers[0].signal[kDependantSignals].size, 0);

152+

t.assert.strictEqual(controllers[1].signal[kDependantSignals].size, 0);

153153154-

done();

154+

done();

155+

});

155156

});

156157

});

157158

});

158159159160

it('drops settled signals even when there are listeners', (t, done) => {

160-

runWithOrphanListeners(limit, (signalRefs) => {

161-

setImmediate(() => {

162-

global.gc();

163-

setImmediate(() => {

164-

global.gc(); // One more call needed to clean up the deeper composed signals

165-

setImmediate(() => {

166-

global.gc(); // One more call needed to clean up the deeper composed signals

167-168-

const unGCedSignals = [...signalRefs].filter((ref) => ref.deref());

169-170-

t.assert.strictEqual(unGCedSignals.length, 0);

161+

runWithOrphanListeners(limit, async (signalRefs) => {

162+

await gcUntil('all signals are GCed', () => {

163+

const unGCedSignals = [...signalRefs].filter((ref) => ref.deref());

171164172-

done();

173-

});

174-

});

165+

return unGCedSignals.length === 0;

175166

});

167+168+

done();

176169

});

177170

});