linux: save and restore old signal actions

Change-Id: I9a69bf347ef70f6a20aaff9cdd4281edb5afff3d
Reviewed-on: https://chromium-review.googlesource.com/c/1263026
Reviewed-by: Mark Mentovai <mark@chromium.org>
Commit-Queue: Joshua Peraza <jperaza@chromium.org>
diff --git a/client/crashpad_client_linux.cc b/client/crashpad_client_linux.cc
index e8e7f46..77faa0a 100644
--- a/client/crashpad_client_linux.cc
+++ b/client/crashpad_client_linux.cc
@@ -100,7 +100,7 @@
                                                   &exception_information_));
 
     StringVectorToCStringVector(argv_strings_, &argv_);
-    return Signals::InstallCrashHandlers(HandleCrash, 0, nullptr);
+    return Signals::InstallCrashHandlers(HandleCrash, 0, &old_actions_);
   }
 
   bool HandleCrashNonFatal(int signo, siginfo_t* siginfo, void* context) {
@@ -144,7 +144,8 @@
     if (enabled_ && HandleCrashNonFatal(signo, siginfo, context)) {
       return;
     }
-    Signals::RestoreHandlerAndReraiseSignalOnReturn(siginfo, nullptr);
+    Signals::RestoreHandlerAndReraiseSignalOnReturn(
+        siginfo, old_actions_.ActionForSignal(signo));
   }
 
   void SetFirstChanceHandler(CrashpadClient::FirstChanceHandler handler) {
@@ -163,6 +164,7 @@
     state->HandleCrashFatal(signo, siginfo, context);
   }
 
+  Signals::OldActions old_actions_ = {};
   std::vector<std::string> argv_strings_;
   std::vector<const char*> argv_;
   std::vector<std::string> envp_strings_;