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_;