nx_release_recent_oom_gate_t205.nx source
↩ module page · 43 lines · 2396 B
1import "nx_release_recent_lib.nx"
2import "nx_gate_verdict.nx"
3func main()->i64 {
4 let checks:*i64=gv_ctr()
5 let r:*ReleaseRecent=rr_new()
6 let counts:*i64=sys_mmap(RD_COUNTS*__size_of(i64)) as *i64
7 let old:*i64=sys_mmap(2*__size_of(i64)) as *i64
8 let limited:*i64=sys_mmap(2*__size_of(i64)) as *i64
9 let row:*u8="log|1789279405|GE57|land|Alpha & memory\n"
10 if rr_collect(r,row,al_slen(row),"","gameengine",counts)!=1{return 1}
11 let required:i64=rr_required(r)
12 let out:*u8=sys_mmap(required)
13 out[0]=165 as u8
14 counts[RD_C_LISTED]=73
15 let retained:*i64=r.rows
16 let capacity:i64=r.capacity
17 if nx_prlimit(0,RLIMIT_AS,0 as *u8,old as *u8)!=0{return 2}
18 limited[0]=0;limited[1]=old[1]
19 if nx_prlimit(0,RLIMIT_AS,limited as *u8,0 as *u8)!=0{return 3}
20 // Isolated qualifier only: actual denial without exhausting shared host memory.
21 let probe:*u8=sys_mmap_try(1)
22 let fresh:*ReleaseRecent=rr_new()
23 let grow:i64=rr_reserve(r,capacity+1)
24 let render:i64=rr_render(r,out,required,counts)
25 let collect:i64=rr_collect(r,row,al_slen(row),"","gameengine",counts)
26 let restored:i64=nx_prlimit(0,RLIMIT_AS,old as *u8,0 as *u8)
27 if restored!=0{return 4}
28 gv_check("actual mapping denial confirmed",(probe as i64)<=0,checks)
29 gv_check("constructor returns refusal",(fresh as i64)<=0,checks)
30 gv_check("reserve refusal preserves allocation",grow==0 && r.rows==retained && r.capacity==capacity,checks)
31 gv_check("render refusal preserves output and count",render<0 && out[0]==165 as u8 && counts[RD_C_LISTED]==73,checks)
32 gv_check("collection refusal preserves retained rows",collect<0 && r.count==1 && counts[RD_C_LAND]==1,checks)
33 gv_check("render recovers after limit restoration",rr_render(r,out,required,counts)>0 && counts[RD_C_LISTED]==1,checks)
34 gv_check("collection recovers after limit restoration",rr_collect(r,row,al_slen(row),"","gameengine",counts)==2,checks)
35 if nx_prlimit(0,RLIMIT_AS,limited as *u8,0 as *u8)!=0{return 5}
36 let sort:i64=rr_sort(r)
37 let restoreSort:i64=nx_prlimit(0,RLIMIT_AS,old as *u8,0 as *u8)
38 if restoreSort!=0{return 6}
39 gv_check("sort scratch allocation refusal returned",sort==0 && r.count==2,checks)
40 gv_check("sort recovery",rr_sort(r)==1,checks)
41 gv_check("owned mappings released",rr_destroy(r)==0,checks)
42 return gv_verdict("release-allocation",checks,"actual allocation denial and recovery; no host pressure induced; page emitter allocation migration separate")
43}