Skip to content

fix: apo ir-blob transient read failures + deterministic harness timing#48

Merged
ealtun21 merged 1 commit into
masterfrom
fix/apo-blob-read-race
Jul 2, 2026
Merged

fix: apo ir-blob transient read failures + deterministic harness timing#48
ealtun21 merged 1 commit into
masterfrom
fix/apo-blob-read-race

Conversation

@ealtun21

@ealtun21 ealtun21 commented Jul 2, 2026

Copy link
Copy Markdown
Owner

The windows-installer runner caught a real one: the e2e blob test measured −2.46 dB instead of −6 because the format-lock blob read failed transiently on the fresh runner (a just-renamed file can be briefly unreadable while an on-access scanner holds it), the chain fell back to unity passthrough, and the worker attached the IR mid-tone — splitting the analysis window across two chain states.

Fixes, three layers:

  • load_ir_blob retries briefly (5×10 ms) — init/worker context only, never the RT callback;
  • the worker only latches the blob generation once the read succeeds — it previously latched on failure, which would have silently disabled convolution until the next IR change on any real Windows box with an on-access scanner (production bug, not just test flake);
  • the hires harness settles 150 ms after lock before driving audio, so a worker-side rebuild can't land mid-tone on a slow runner.

Verified: 27 serial APO tests green natively on the Windows VM at this commit; make check green on Linux. Merge gated on CI.

…ness timing

Caught by the windows-installer CI runner: the e2e blob test measured
-2.46 dB instead of -6 — the format-lock blob read failed transiently
on the fresh runner (a just-renamed file can be held by an on-access
scanner), the chain fell back to unity passthrough, and the worker's
first tick attached the IR mid-tone, splitting the analysis window.

Three layers:
- load_ir_blob retries briefly (5 x 10 ms) before giving up — init and
  worker context only, never the RT callback;
- the worker only latches the blob generation once the read SUCCEEDS;
  it previously latched on failure too, which would have disabled
  convolution until the next IR change on a real user's box with an
  on-access scanner (production bug, not just test flake);
- the hires harness settles 150 ms after lock before driving audio, so
  a worker-side rebuild can't land mid-tone on a slow runner (the tight
  process loop runs faster than real time).
@ealtun21 ealtun21 merged commit 371612f into master Jul 2, 2026
3 checks passed
@ealtun21 ealtun21 deleted the fix/apo-blob-read-race branch July 2, 2026 03:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant