Merge pull request #2830 from atn34/atn34/dump-core

Dump core from custom signal handler
This commit is contained in:
A.J. Beamon 2020-03-23 08:52:08 -07:00 committed by GitHub
commit a484cc97f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 1 deletions

View File

@ -2787,7 +2787,25 @@ void crashHandler(int sig) {
fprintf(stderr, "SIGNAL: %s (%d)\n", strsignal(sig), sig);
fprintf(stderr, "Trace: %s\n", backtrace.c_str());
_exit(128 + sig);
struct sigaction sa;
sa.sa_handler = SIG_DFL;
if (sigemptyset(&sa.sa_mask)) {
int err = errno;
fprintf(stderr, "sigemptyset failed: %s\n", strerror(err));
_exit(sig + 128);
}
sa.sa_flags = 0;
if (sigaction(sig, &sa, NULL)) {
int err = errno;
fprintf(stderr, "sigaction failed: %s\n", strerror(err));
_exit(sig + 128);
}
if (kill(getpid(), sig)) {
int err = errno;
fprintf(stderr, "kill failed: %s\n", strerror(err));
_exit(sig + 128);
}
// Rely on kill to end the process
#else
// No crash handler for other platforms!
#endif