diff options
author | Tor Brede Vekterli <vekterli@oath.com> | 2019-01-11 17:08:56 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-11 17:08:56 +0100 |
commit | 64d7ba0cf6afbbb125a9b888d456f151cab890f2 (patch) | |
tree | fd78de0092e85d42d5a7c62ab6279d016c5bc96d /searchlib | |
parent | d06959a52e1829155f54ddcff1ce29de2764c67f (diff) | |
parent | 06718046727efbcd21a28362784fd89e3b40374b (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.cpp | 5 |
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 } } |