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) {