fix(vk): disable failed frame log sinks and unwind startup #1531
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot!1531
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/frame-log-sink-failure"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The binary frame logger can announce recording before its worker opens the file. If opening fails, records are silently discarded; partial GPU startup leaks resources, and write/flush failures leave a dead sink accepting more records. This makes diagnostic captures unreliable.
Open the sink before publishing readiness and unwind its complete startup resource set on failure. Check record writes and flushes in the worker; disable capture, clear queued CPU records and close the file once after an IO error. Enqueue checks the disabled state under the same queue lock. Report the failing stage once, preserving the existing no-retry-per-process policy.
Validation at
27f1810on main854c34c:c824f6eona72690c: FG2 healthy capture parses128 records,64 generated,0 missing; maximize/restore and exit0. A separate run with a directory as the output path reports the open error once, emits no false recording announcement, continues rendering and resizing, and exits0. Original checkpoint hashes are unchanged. The final rebase changes only the Linux updater and its test; GPU, host and nx2 Git trees are identical. Native evidence retains its original head rather than being relabeled as another run.Runtime IO failure retains resources potentially used by submitted GPU work. Successful output keeps its format, per-record flush and512-record queue bound. The healthy worker still has its existing process lifetime: this does not add shutdown/draining or promise process-exit durability. Disk-full hardware faults and GPU reset were not induced; partial writes/flush failures use the real worker with IO stand-ins. See
docs/framelog-sink-failures.md.Readback visibility (#1502), normal screenshot slot ownership (#1519), and device-loss reporting (#1515) remain separate contracts. No game assets, captures, generated game code or binaries are included. Three exact-head fork workflows follow.
Current-head validation
Current head
0e4e752, based on main509579b. Earlier local/runtime results describe their recorded source hashes.The standalone contribution patch is unchanged after the audited main refresh; exact-head build/source checks are refreshed below. Earlier runtime evidence remains tied to its recorded hash.
Fork runs are separate from upstream Actions approval; no maintainer approval gate is bypassed.