aboutsummaryrefslogtreecommitdiff
path: root/src/libmain/stack.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmain/stack.cc')
-rw-r--r--src/libmain/stack.cc16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/libmain/stack.cc b/src/libmain/stack.cc
index a6d10f738..10f71c1dc 100644
--- a/src/libmain/stack.cc
+++ b/src/libmain/stack.cc
@@ -30,10 +30,7 @@ static void sigsegvHandler(int signo, siginfo_t * info, void * ctx)
ptrdiff_t diff = (char *) info->si_addr - sp;
if (diff < 0) diff = -diff;
if (diff < 4096) {
- char msg[] = "error: stack overflow (possible infinite recursion)\n";
- [[gnu::unused]] auto res = write(2, msg, strlen(msg));
- nix::extraStackOverflowHandler(info, ctx);
- _exit(1); // maybe abort instead?
+ nix::stackOverflowHandler(info, ctx);
}
}
@@ -69,9 +66,12 @@ void detectStackOverflow()
#endif
}
-std::function<void(siginfo_t * info, void * ctx)> extraStackOverflowHandler(
- [](siginfo_t * info, void * ctx) {
- }
-);
+std::function<void(siginfo_t * info, void * ctx)> stackOverflowHandler(defaultStackOverflowHandler);
+
+void defaultStackOverflowHandler(siginfo_t * info, void * ctx) {
+ char msg[] = "error: stack overflow (possible infinite recursion)\n";
+ [[gnu::unused]] auto res = write(2, msg, strlen(msg));
+ _exit(1); // maybe abort instead?
+}
}