intro-video RE: deep demux-core instrumentation + handoff hygiene
Investigation probes for the ADV.wmv intro-video deadlock (feeder's demux source-read 0x825211a0 returns no-data 0x80500000 where canary returns 0). - xenia-kernel/state.rs: extend AUDIT-DEREF (fire_audit_pc_probe_if_match) to deep-dump the demux-state object (to +0xfc), its buffer descriptor [sub+4], the byte-source sub-objects ([sub+0]/[+0x30]/[+0x94] and [src0+0x2c]), and to WALK the windowed-buffer cached-block linked list (AUDIT-BLK: per-block 64-bit start/size/dataptr) exactly as mapper 0x82522118 does. Read-only, env-gated (XENIA_AUDIT_DEREF); lockstep digest unaffected. - xenia-app/main.rs: XENIA_DUMP_SLOTS observe-only scheduler runqueue dump. - xenia-app/tests/sylpheed_oracles.rs: resolve ISO via SYLPHEED_ISO, then the repo-root sylpheed.iso symlink, then default; fix path typo. - .gitignore: exclude .claude/ (71k files / 66GB agent worktrees) and the local investigation artifacts (audit-runs/, exit-thread-state.json, zq_*.py). Findings (full chain in handoff notes): all ASF header metadata parses correctly (packet size 16415, count 4728, 2 streams); cursors correct (cur=5868, limit=77.6M); the windowed buffer works and slides (512B blocks); no-data originates deep in the byte-read/parse chain, not from an empty buffer. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -4276,6 +4276,34 @@ fn dump_thread_diagnostic(
|
||||
}
|
||||
use xenia_kernel::objects::KernelObject;
|
||||
|
||||
// STEP-10 diagnostic (observe-only, env-gated `XENIA_DUMP_SLOTS=1`).
|
||||
// Prints each scheduler slot's full runqueue with the fields needed to
|
||||
// distinguish "Blocked(Suspended) forever" from "Ready but never picked":
|
||||
// tid, handle, state, suspend_count, idx, and the slot's running_idx.
|
||||
// Read-only — no guest state mutation, no scheduler-behavior change — so
|
||||
// the lockstep digest is unaffected. Not gated on `--quiet` so the
|
||||
// documented headless invocation still emits it.
|
||||
if std::env::var("XENIA_DUMP_SLOTS").as_deref() == Ok("1") {
|
||||
println!("\n=== SLOT DUMP (XENIA_DUMP_SLOTS) ===");
|
||||
for (hw_id, slot) in kernel.scheduler.slots.iter().enumerate() {
|
||||
println!(" hw={} running_idx={:?} depth={}", hw_id, slot.running_idx, slot.runqueue.len());
|
||||
for (idx, t) in slot.runqueue.iter().enumerate() {
|
||||
println!(
|
||||
" idx={} tid={} handle={:?} state={:?} suspend_count={} pri={} mask={:#04x} pc={:#010x}",
|
||||
idx,
|
||||
t.tid,
|
||||
t.thread_handle.map(|h| format!("{:#06x}", h)),
|
||||
t.state,
|
||||
t.suspend_count,
|
||||
t.priority,
|
||||
t.affinity_mask,
|
||||
t.ctx.pc,
|
||||
);
|
||||
}
|
||||
}
|
||||
println!("=== END SLOT DUMP ===\n");
|
||||
}
|
||||
|
||||
// Toolkit-audit fix (2026-06-21): only the ALWAYS-ON thread/waiter table
|
||||
// is suppressed by `--quiet`. The explicitly-armed diagnostics below
|
||||
// (`--trace-handles`, `--trace-handles-focus`, `--dump-addr`) are
|
||||
|
||||
Reference in New Issue
Block a user