Round reset + device-creation retry + load-time pump (rejoin trilogy)
1. ROUND RESET (the "picked Hellbringer, got a Blackhawk" field bug): trim/prefs finalize the session egg for ONE round, and that was permanent for the relay's lifetime -- a rejoin after a mission or crash got the stale finalized egg and its new callsign/mech request was recorded but never applied. _maybe_reset_round() (both drop paths) restores the original egg/roster/launch state once every pod is gone; live beacons re-key by tag position (conn.seat_tag). Verified two-round e2e: blkhawk mission -> exit -> RESET -> lok1 request -> egg rewritten -> the Hellbringer spawned. 2. DEVICE-CREATION RETRY: CreateDevice(HARDWARE_VERTEXPROCESSING) fails transiently when a just-exited instance still holds the adapter (caught live; also the parked "exit 139" join crash). The old double-failure path called PostQuitMessage(1) -- which does NOT stop execution -- and the NULL mDevice deref right after was the real crash. Now: HW->SW retry with 500ms backoff and a 20s deadline, then a clean error box + ExitProcess. 3. LOAD-TIME PUMP: mission load is thousands of back-to-back synchronous model loads; the starved message pump ghosted the window "Not Responding" mid-load. BTLoadPump() (hooked from d3d_OBJECT::LoadObject) pumps + repaints the wait screen at most every 150ms pre-run; no-op once the scene is live. Also: round-reset originals captured after the roster parse (the first cut crashed the relay constructor -- caught by the two-round test). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
638cfca18d
commit
3a9b35fc06
@@ -425,6 +425,26 @@ phase). Plan: `~/.claude/plans/partitioned-snuggling-piglet.md`.
|
||||
deferrals so a wedged load still surfaces the original Fail. `[launch] ... deferred +1s`
|
||||
log per deferral. Verified: the crashing shape deferred 104x through a ~50s load, then
|
||||
launched and ran clean.
|
||||
- **ROUND RESET (2026-07-22) [T2]**: trim/prefs FINALIZE the egg for one round -- and that used
|
||||
to be permanent for the relay's lifetime, so a REJOIN after a mission (or crash) was served
|
||||
the stale finalized egg and its new callsign/mech request was recorded but never applied (the
|
||||
field "picked Hellbringer, got a Blackhawk"). Now `_maybe_reset_round()` (triggered from both
|
||||
drop paths) restores the ORIGINAL egg/roster/launch state once every pod is gone; live beacons
|
||||
(players already waiting for the next round) re-key by their TAG's position in the restored
|
||||
roster (`conn.seat_tag`, captured at assign). Verified two-round e2e: round 1 blkhawk mission
|
||||
-> pod exit -> RESET -> round 2 requested lok1 -> egg rewritten vehicle=lok1 -> the pod
|
||||
spawned the Hellbringer. Operator flow for code updates: the relay is spawned per Start
|
||||
Session -- a session RESTART picks up new btconsole code.
|
||||
- **DEVICE-CREATION RETRY (2026-07-22) [T2]**: `CreateDevice(HARDWARE_VERTEXPROCESSING)` can
|
||||
fail TRANSIENTLY (a just-exited instance still holds the adapter -- caught live: a round-2
|
||||
pod died while round-1 tore down; also the parked "exit 139 during join"). The old code had
|
||||
no retry AND its double-failure path called PostQuitMessage(1) which does NOT stop execution
|
||||
-- the NULL mDevice deref right after was the actual crash. Now: HW->SW retry loop, 500ms
|
||||
backoff, 20s deadline, then a clean MessageBox + ExitProcess (L4VIDEO.cpp).
|
||||
- **LOAD-TIME PUMP (2026-07-22) [T2]**: the mission load is thousands of small synchronous
|
||||
model loads back-to-back -- the message pump starved and the window ghosted "Not Responding"
|
||||
mid-load. `BTLoadPump()` (L4VIDEO, hooked from `d3d_OBJECT::LoadObject`) pumps + repaints the
|
||||
wait screen at most every 150ms during pre-run states; no-op once the scene is live.
|
||||
- **PATIENT WALK-UP (2026-07-18) [T2]**: a pod dialed at a relay that isn't up yet no longer
|
||||
aborts (release `Fail()` is a bare `abort()` = looked like a "crash", field report). Both the
|
||||
seat request (`RelayRequestSeat`) and LAN discovery (`BT_RELAY=auto`) now RETRY (2s dials, 30
|
||||
|
||||
Reference in New Issue
Block a user