Commit 9adcf51
Ralph Küpper
fix(gc): ScheduleGuard's arm bookkeeping must be asymmetric — disarm_poll saturates
off()-disarm-then-Drop-rearm leaks +1 permanently when the disarm lands on
a zero word (saturation loses the decrement, the paired arm does not). The
leak pinned the poll armed for the rest of the test binary: the timing test
slowed and the generation-gate contract took a safepoint drain mid-stage,
2/2 consistently. Only set() arms; only its own Drop releases. 3/3 full-suite
runs clean after.
Claude-Session: https://claude.ai/code/session_01Y1QZ5wUP9gRSwpiweT4Wix1 parent 8d098fa commit 9adcf51
1 file changed
Lines changed: 19 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
300 | 300 | | |
301 | 301 | | |
302 | 302 | | |
303 | | - | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
304 | 307 | | |
305 | 308 | | |
306 | 309 | | |
307 | 310 | | |
308 | 311 | | |
309 | 312 | | |
310 | | - | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
311 | 321 | | |
312 | | - | |
| 322 | + | |
| 323 | + | |
313 | 324 | | |
314 | 325 | | |
315 | | - | |
| 326 | + | |
316 | 327 | | |
317 | 328 | | |
318 | 329 | | |
319 | | - | |
320 | | - | |
321 | | - | |
322 | | - | |
| 330 | + | |
323 | 331 | | |
324 | 332 | | |
325 | 333 | | |
326 | 334 | | |
327 | 335 | | |
328 | 336 | | |
329 | | - | |
330 | | - | |
331 | | - | |
332 | | - | |
333 | | - | |
334 | | - | |
335 | | - | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
336 | 340 | | |
337 | 341 | | |
338 | 342 | | |
| |||
0 commit comments