|
1 | 1 | // Flags: --expose_gc |
2 | 2 | // |
3 | 3 | import '../common/index.mjs'; |
| 4 | +import { gcUntil } from '../common/gc.js'; |
4 | 5 | import { describe, it } from 'node:test'; |
5 | 6 |
|
6 | 7 | function makeSubsequentCalls(limit, done, holdReferences = false) { |
@@ -141,37 +142,29 @@ it('drops settled dependant signals when signal is composite', (t, done) => { |
141 | 142 | ); |
142 | 143 |
|
143 | 144 | 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); |
145 | 149 |
|
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); |
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); |
153 | 153 |
|
154 | | - done(); |
| 154 | + done(); |
| 155 | + }); |
155 | 156 | }); |
156 | 157 | }); |
157 | 158 | }); |
158 | 159 |
|
159 | 160 | 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()); |
171 | 164 |
|
172 | | - done(); |
173 | | - }); |
174 | | - }); |
| 165 | + return unGCedSignals.length === 0; |
175 | 166 | }); |
| 167 | + |
| 168 | + done(); |
176 | 169 | }); |
177 | 170 | }); |
0 commit comments