|
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