code wiki / _hdl_build / nx_signal_gate_t188.nx

nx_signal_gate_t188.nx source

↩ module page · 22 lines · 1362 B

1import "nx_signal.nx" 2import "nx_gate_verdict.nx" 3func main()->i64{ 4 let c:*i64=gv_ctr();let status:*i64=sys_mmap(8) as *i64 5 let pid:i64=sys_fork() 6 if pid==0{ 7 let cc:*i64=gv_ctr() 8 let original:*NxSigAction=sys_mmap(NX_SIGACTION_BYTES) as *NxSigAction 9 let observed:*NxSigAction=sys_mmap(NX_SIGACTION_BYTES) as *NxSigAction 10 gv_check("query original SIGXFSZ action",nx_signal_action_install(25,0 as *NxSigAction,original)==0,cc) 11 gv_check("install SIGXFSZ ignore",nx_signal_ignore(25)==0,cc) 12 gv_check("query ignored SIGXFSZ action",nx_signal_action_install(25,0 as *NxSigAction,observed)==0,cc) 13 gv_check("queried handler is SIG_IGN",observed.handler==NX_SIG_IGN,cc) 14 gv_check("restore original SIGXFSZ action",nx_signal_action_install(25,original,0 as *NxSigAction)==0,cc) 15 gv_check("query restored SIGXFSZ action",nx_signal_action_install(25,0 as *NxSigAction,observed)==0,cc) 16 gv_check("restored handler and mask match original",observed.handler==original.handler&&observed.mask==original.mask,cc) 17 sys_exit(gv_verdict("signal-child",cc,"Own child only; original handler restored")) 18 } 19 gv_check("isolated child created",pid>0,c) 20 if pid>0{let waited:i64=sys_wait4(pid,status,0);gv_check("signal child exits cleanly",waited==pid&&wait_status_rc(status[0])==0,c)} 21 return gv_verdict("signal-abi",c,"No parent or daemon signal state modified") 22}