make_browsers creates each browser synchronously and adopts it in the same call, so no view waits on a browser: it leaves before creation (skipped) or has a browser to close. The late-close branch in on_after_created is gone. webprobe drops 5 views before the pump and 10 within 27 ms; webview.sh wants all 35 freed before the hold. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1.1 KiB
FAIL
crates/ely-web-content/examples/webprobe.rs:193 — R1's regression-coverage defect remains: the 0–27 ms timers do not ensure a view is dropped after browser creation is submitted but before on_after_created. In review copies on both Windows and WSL, restoring asynchronous creation and unconditional callback adoption (the original M-12 bug) still satisfies the new release assertion: 30/30 surfaces freed before hold. When the actual WebView::Drop and deferred close run deterministically between submission and the creation callback, that same mutant frees only 20/30; the current synchronous implementation frees 30/30. Thus the original PERF-08 leak can return without this regression probe detecting it. Retain a deterministic lifecycle regression covering that ordering and verify that it rejects the original leaking implementation. Evidence: .work/m12-r2/windows-async-result.log, .work/m12-r2/linux-async-result.log, .work/m12-r2/windows-async-forced-result.log, .work/m12-r2/linux-async-forced-result.log; probe method and cleanup are recorded in .work/m12-r2/evidence.log.