Open ashelkovnykov opened 10 months ago
@ashelkovnykov how hard would this be to implement on top of what you've done for bail:meme?
This would remove the need to check the TERMINATOR
static flag on every 2 and 9. Instead, if an error was returned from the hw_exception::catch
block in the interpreter, we could just return bail:alrm
.
This should be pretty easy now that we have the C signal handler code for the guard page: just need to add some more handlers in the same lib.
The current implementation of handling
SIGINT
signals in Ares from king sets a sentinel value which is polled on every call to Nock2
, Nock9
, and push to mean stack. If the sentinel value is set, the event bails with a non-deterministic error. If the sentinel value is already set when the user attempts to set it again, the serf process exits.An alternative solution is to
mprotect()
the entireNockStack
onSIGINT
. The next access will hitSIGSEGV
, from where we can un-protect theNockStack
memory and bail with a non-deterministic error. A second call to SIGINT while the region is alreadymprotect()
ed will kill the serf process.