forked from lei.chen/myxce
The "libxce reconnect heap corruption" (ASAN bad-free, free(): invalid pointer) was NOT a libxce bug — xce_ctx_reconnect is fine. The crashes are in the scheduler's rejoin state re-sync path (config/dataset re-push), fixed with the reconnect/rejoin feature now integrated: 1. group.c makeGroup refresh: FREEUP(m->u.name) raw-freed shared interned xstrings (makeString is a global refcounted table); the correct release is dereference(), matching group_killer. → dereference(). 2. limit.c limit_update_config: after key_add returns -EEXIST (rejoin re-push — limit name already present) it called kill_limit(limit), but xkvmgr_add's vclear already freed the limit via the kvmgr datakiller (=kill_limit). → skip on -EEXIST (idempotent re-push). 3. handler.c/scheduler.c: the config push was applied inline on the vcpu thread (sched_init_config adds queues/plugin queues) while job updates flow through pend_updates on the main loop — concurrent rejoin re-push let fcfs_update_job see a NULL j->queue (SIGSEGV). Route the config push through pend_updates (XCE_SCHED_OP_UPDATE_CONFIG, killer case already existed) and process config requests FIRST in sched_update via a staging queue so jobs always see their queues/resources. Verified: 295 lib unit tests pass under ASAN (incl. 2 new group-refresh regression tests), scheduler survives 3 consecutive controller restarts (each rejoin ok), full job lifecycle (submit→dispatch→DONE) on the cluster. Also fixed stale build deps (libxce_deps missing librtti_dep, scheduler_deps missing ssl_dep/c_capnproto_dep, unity include path). Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| superpowers/plans | ||
| aibot_poc_investiagting.md | ||
| Job-Finish-Robustness-设计文档.md | ||
| left_scheduler_work.md | ||
| pend-reason-investigation-design.md | ||
| Scheduler-Agent-设计文档.md | ||