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}