forked from lei.chen/myxce
Two correctness fixes found during final Phase 6 code review: F1 (CRITICAL): GC permanently disabled — staging_merge_complete bootstrapping deadlock. sched_begin_session reset staging_merge_complete to 0 but never set it back to 1, so sched_end_session's guard (!staging_merge_complete) always fired, preventing GC from ever running. select-node memory leaked indefinitely across scheduling sessions. Fix: set staging_merge_complete=1 at the end of sched_begin_session after all staging work (sched_account_jobs etc.) completes. F2 (HIGH): recompact_node_ids() omitted from GC protocol in sched_end_session. The protocol in resreq.h requires gc_sweep → recompact_node_ids. Without recompaction, sel_node_next_id grows monotonically across sessions and select_eval_ctx_t arrays (sized by max node_id) grow without bound. Fix: call recompact_node_ids() after gc_sweep_select_nodes. Also adds test_staging_merge_complete_gc_guard to document the bootstrap invariant: sched_begin_session must leave staging_merge_complete=1 so the GC guard in sched_end_session does not fire. |
||
|---|---|---|
| .. | ||
| include | ||
| src | ||
| testsuite | ||
| CLAUDE.md | ||
| meson.build | ||