aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2019-01-11 17:08:56 +0100
committerGitHub <noreply@github.com>2019-01-11 17:08:56 +0100
commit64d7ba0cf6afbbb125a9b888d456f151cab890f2 (patch)
treefd78de0092e85d42d5a7c62ab6279d016c5bc96d /searchlib
parentd06959a52e1829155f54ddcff1ce29de2764c67f (diff)
parent06718046727efbcd21a28362784fd89e3b40374b (diff)
Merge pull request #8114 from vespa-engine/vekterli/always-sleep-during-sigbus-handling
Always sleep for some seconds during SIGBUS handling
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/util/sigbushandler.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/searchlib/src/vespa/searchlib/util/sigbushandler.cpp b/searchlib/src/vespa/searchlib/util/sigbushandler.cpp
index 9de3f16be67..7356baab131 100644
--- a/searchlib/src/vespa/searchlib/util/sigbushandler.cpp
+++ b/searchlib/src/vespa/searchlib/util/sigbushandler.cpp
@@ -97,7 +97,7 @@ SigBusHandler::handle(int sig, siginfo_t *si, void *ucv)
do {
// Protect against multiple threads.
TryLockGuard guard;
- if (!guard.gotLock()) {
+ if (!guard.gotLock() || _fired) {
raced = true;
break;
}
@@ -121,18 +121,19 @@ SigBusHandler::handle(int sig, siginfo_t *si, void *ucv)
sleep(5);
return;
}
- untrap(); // Further bus errors will trigger core dump
if (_unwind != nullptr) {
// Unit test is using siglongjmp based unwinding
sigjmp_buf *unwind = _unwind;
_unwind = nullptr;
+ untrap(); // Further bus errors will trigger core dump
siglongjmp(*unwind, 1);
} else {
// Normal case, sleep 3 seconds (i.e. allow main thread to detect
// issue and notify cluster controller) before returning and
// likely core dumping.
sleep(3);
+ untrap(); // Further bus errors will trigger core dump
}
}