diff options
author | Théophane Hufschmitt <theophane.hufschmitt@tweag.io> | 2022-11-14 15:00:05 +0100 |
---|---|---|
committer | Théophane Hufschmitt <theophane.hufschmitt@tweag.io> | 2022-11-14 15:00:05 +0100 |
commit | 8b4352d79b488a82321254b7ab531ff977816361 (patch) | |
tree | 50e0dfb0d22b82d49b82aac0cd7b80f5482deada /src/libmain/shared.hh | |
parent | e7ed9ae0c711c4efd83756b16379549ecff52355 (diff) | |
parent | 302ddee749f1341895b3f18c7f430dfc13171985 (diff) |
Merge remote-tracking branch 'nixos/master' into readFile-scan-references
Diffstat (limited to 'src/libmain/shared.hh')
-rw-r--r-- | src/libmain/shared.hh | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libmain/shared.hh b/src/libmain/shared.hh index 0cc56d47d..3c37fd627 100644 --- a/src/libmain/shared.hh +++ b/src/libmain/shared.hh @@ -113,5 +113,25 @@ struct PrintFreed /* Install a SIGSEGV handler to detect stack overflows. */ void detectStackOverflow(); +/* Pluggable behavior to run in case of a stack overflow. + + Default value: defaultStackOverflowHandler. + + This is called by the handler installed by detectStackOverflow(). + + This gives Nix library consumers a limit opportunity to report the error + condition. The handler should exit the process. + See defaultStackOverflowHandler() for a reference implementation. + + NOTE: Use with diligence, because this runs in the signal handler, with very + limited stack space and a potentially a corrupted heap, all while the failed + thread is blocked indefinitely. All functions called must be reentrant. */ +extern std::function<void(siginfo_t * info, void * ctx)> stackOverflowHandler; + +/* The default, robust implementation of stackOverflowHandler. + + Prints an error message directly to stderr using a syscall instead of the + logger. Exits the process immediately after. */ +void defaultStackOverflowHandler(siginfo_t * info, void * ctx); } |