From 58cd1d2f8a0474de45112e8d6e460051494eba79 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Wed, 25 Nov 2020 17:43:32 +0100 Subject: main: generate coredump and exit upon SIGABRT received Previous code relied on abort() switching sigaction to SIG_FDL + retriggering SIGABRT in case the signal handler returns, which would then generate the coredump + terminate the process. However, if a SIGABRT is received from somewhere else (kill -SIGABRT), then the process would print the talloc report and continue running, which is not desired. Change-Id: I8f02925eedd8855bb58555df20b443f79d5c6da8 Fixes: OS#4865 --- src/pcu_main.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp index 8ec90483..2138fd99 100644 --- a/src/pcu_main.cpp +++ b/src/pcu_main.cpp @@ -203,9 +203,16 @@ void sighandler(int sigset) quit = 1; break; case SIGABRT: - /* in case of abort, we want to obtain a talloc report - * and then return to the caller, who will abort the process + /* in case of abort, we want to obtain a talloc report and + * then run default SIGABRT handler, who will generate coredump + * and abort the process. abort() should do this for us after we + * return, but program wouldn't exit if an external SIGABRT is + * received. */ + talloc_report_full(tall_pcu_ctx, stderr); + signal(SIGABRT, SIG_DFL); + raise(SIGABRT); + break; case SIGUSR1: case SIGUSR2: talloc_report_full(tall_pcu_ctx, stderr); -- cgit v1.2.3