Fix fault handler to unregister on shutdown
This fixes a problem with the fault handler where it wasn't
unregistering itself during shutdown of the runtime.
Bug: 17133266
(cherry picked from commit e8b9afcd0cd86b8808af29a97332038aab70c604)
Change-Id: I1a4ec4292ec049046dda30769265680201729efb
diff --git a/runtime/fault_handler.cc b/runtime/fault_handler.cc
index 8ddaf5c..68fad7b 100644
--- a/runtime/fault_handler.cc
+++ b/runtime/fault_handler.cc
@@ -41,7 +41,7 @@
fault_manager.HandleFault(sig, info, context);
}
-FaultManager::FaultManager() {
+FaultManager::FaultManager() : initialized_(false) {
sigaction(SIGSEGV, nullptr, &oldaction_);
}
@@ -50,6 +50,7 @@
void FaultManager::Init() {
+ CHECK(!initialized_);
struct sigaction action;
action.sa_sigaction = art_fault_handler;
sigemptyset(&action.sa_mask);
@@ -65,6 +66,14 @@
}
// Make sure our signal handler is called before any user handlers.
ClaimSignalChain(SIGSEGV, &oldaction_);
+ initialized_ = true;
+}
+
+void FaultManager::Shutdown() {
+ if (initialized_) {
+ UnclaimSignalChain(SIGSEGV);
+ initialized_ = false;
+ }
}
void FaultManager::HandleFault(int sig, siginfo_t* info, void* context) {