code wiki / _hdl_build / nx_qserver.nx

nx_qserver.nx

buildroot/runtime/_hdl_build/nx_qserver.nx

8565 B166 linesdepth 3pulls 3 transitivereach 0 importersview sourcekind tool
docsdependenciesstructsconstsfunctions

about

nx_qserver.nx -- MULTI-SLOT sovereign job queue: one persistent process that scans a directory for *.job files (sys_getdents64, the same syscall nx_claude_bridge's ls uses) and runs each, so the agent loop can have MANY jobs in flight (vs nx_jobserver's single fixed slot). Per job <base>.job: read it (line1 elf, lines2.. args VERBATIM) -> fork/exec directly with a WATCHDOG (kill -9 at <watchdog>s) -> capture stdout+stderr -> <base>.out -> write exit code -> <base>.res -> delete <base>.job (consume). Collects names FIRST, then processes (so unlinking never disturbs the getdents scan). Stop via <dir>/nxq.stop. usage: nx_qserver <queuedir> <pollbudget> <watchdog-sec> (budget=0 = forever). No sh, no quoting. Sovereign: nx_syscalls only. license_tier: ORIGINAL

dependencies 2 imports · 0 importers

nx_syscalls.nx nx_itoa_lib.nx nx_qserver.nx

imports: nx_syscalls.nxnx_itoa_lib.nx

imported by: nobody (leaf or entry point)

call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown

main sys_write qs_atoi sys_mmap qs_path qs_w sys_write ↻ qs_scan sys_openat_rd sys_mmap ↻ sys_getdents64 qs_ends_job qs_slen sys_close qs_slen ↻ qs_path ↻ qs_rpath sys_read_file sys_openat_rd ↻ sys_lseek sys_mmap ↻ sys_read sys_close ↻ qs_run_job sys_mmap ↻ sys_openat_wr sys_fork sys_dup3 sys_execve sys_exit sys_wait4 nx_kill qs_sleep_ms sys_mmap ↻ sys_close ↻ sys_openat_wr ↻ qs_wn_fd nxi_fd sys_mmap ↻ ccz_cat_num

structs

none

consts

11const K_MAGIC_1000000: i64 = 1000000
12const K_MAGIC_65536: i64 = 65536
13const K_MAGIC_1024: i64 = 1024

functions

15func qs_w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
called by 2: qs_scanmain calls 1: sys_write
20func qs_wn(v: i64) -> i64 { nxi_out(v); return 0 }
called by 2: qs_scanmain calls 1: nxi_out
21func qs_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
called by 2: qs_ends_jobqs_scan
22func qs_atoi(s: *u8) -> i64 { var v: i64 = 0; var i: i64 = 0; while s[i] != (0 as u8) { let c: i64 = s[i] as i64; if c >= 48 { if c <= 57 { v = v * 10 + (c - 48) } } i = i + 1 } return v }
called by 1: main
24func qs_sleep_ms(ms: i64) -> i64 { let ts: *i64 = sys_mmap(16) as *i64; ts[0] = ms / 1000; ts[1] = (ms % 1000) * K_MAGIC_1000000; return __syscall(SYS_CLOCK_NANOSLEEP, 0, 0, ts, 0, 0, 0) }
called by 2: qs_run_jobmain calls 1: sys_mmap
29func qs_wn_fd(fd: i64, v: i64) -> i64 { nxi_fd(fd, v); return 0 }
called by 1: qs_scan calls 1: nxi_fd
30func qs_path(dir: *u8, name: *u8, out: *u8) -> i64
called by 2: qs_scanmain
39func qs_rpath(dir: *u8, name: *u8, namelen: i64, suffix: *u8, out: *u8) -> i64
called by 1: qs_scan
48func qs_ends_job(name: *u8) -> i64
called by 1: qs_scan calls 1: qs_slen
58func qs_run_job(reqbuf: *u8, n: i64, out_path: *u8, wdog_sec: i64) -> i64
95func qs_scan(dir: *u8, wdog: i64) -> i64
148func main(argc: i64, argv: *i64) -> i64