classify SIGSEV/SIGBUS as infinite recursion errors
This commit is contained in:
parent
093b8ce5cc
commit
b73f7ceff4
|
@ -126,17 +126,34 @@ void handleBrokenWorkerPipe(Proc &proc, std::string_view msg) {
|
||||||
if (WEXITSTATUS(status) == 1) {
|
if (WEXITSTATUS(status) == 1) {
|
||||||
throw Error(
|
throw Error(
|
||||||
"while %s, evaluation worker exited with exit code 1, "
|
"while %s, evaluation worker exited with exit code 1, "
|
||||||
"(possibly an infinite recursion)",
|
"(possible infinite recursion)",
|
||||||
msg);
|
msg);
|
||||||
}
|
}
|
||||||
throw Error("while %s, evaluation worker exited with %d", msg,
|
throw Error("while %s, evaluation worker exited with %d", msg,
|
||||||
WEXITSTATUS(status));
|
WEXITSTATUS(status));
|
||||||
} else if (WIFSIGNALED(status)) {
|
} else if (WIFSIGNALED(status)) {
|
||||||
if (WTERMSIG(status) == SIGKILL) {
|
switch (WTERMSIG(status)) {
|
||||||
throw Error("while %s, evaluation worker got killed by "
|
case SIGKILL:
|
||||||
"SIGKILL, maybe "
|
throw Error(
|
||||||
|
"while %s, evaluation worker got killed by SIGKILL, "
|
||||||
|
"maybe "
|
||||||
"memory limit reached?",
|
"memory limit reached?",
|
||||||
msg);
|
msg);
|
||||||
|
break;
|
||||||
|
#ifdef __APPLE__
|
||||||
|
case SIGBUS:
|
||||||
|
throw Error(
|
||||||
|
"while %s, evaluation worker got killed by SIGBUS, "
|
||||||
|
"(possible infinite recursion)",
|
||||||
|
msg);
|
||||||
|
break;
|
||||||
|
#else
|
||||||
|
case SIGSEGV:
|
||||||
|
throw Error(
|
||||||
|
"while %s, evaluation worker got killed by SIGSEGV, "
|
||||||
|
"(possible infinite recursion)",
|
||||||
|
msg);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
throw Error(
|
throw Error(
|
||||||
"while %s, evaluation worker got killed by signal %d (%s)",
|
"while %s, evaluation worker got killed by signal %d (%s)",
|
||||||
|
|
Loading…
Reference in a new issue