mirror of
https://github.com/tangerineturtle1/NX2navi.git
synced 2026-11-15 19:19:58 -04:00
The review of c05e6528 found a window in perf.c ft_frame: it loads walk_t0 and then walk_t1, while perf_census_walk(1) stores walk_t1 = 0 and then the new start. A walk that starts between the two loads leaves ft_frame with the previous walk's start and an end of 0, so perf_census.h census_charge took that walk as running since then, the whole frame as overlapped, and moved all its replay and unattributed time to "census". The window is a few nanoseconds, but the error is a whole frame. A walk takes 100-260 ms, so census_charge now returns 0 for a walk seen running for longer than CENSUS_WALK_MAX_NS (2 s). tests/census_charge_check.c gets a torn read (a start 10 s back with an end of 0), a walk running for 1.9 s, which still counts, and one running for 2.001 s, which does not; its random frames now reach walks more than 2 s old and check the moved time exactly (the overlap capped by the frame's room and its replay and unattributed parts) instead of only its bound. Built against the header before this change, the check fails the torn read, the 2.001 s walk and the first such random frame; with it, it passes. docs/building.md names the new case. Diagnostics only: the census part exists only with NX2NAVI_MEM_CENSUS = 1. Not reproduced in a run (the window is a few nanoseconds). perf.c compiles with the dev flags and adds no -Wall -Wextra warnings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>