mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-trx.git
synced 2025-11-03 13:43:18 +00:00
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: I3a3ff56cb2d740a33731ecfdf76aa32606872883 Fixes: OS#4865
This commit is contained in:
@@ -177,6 +177,17 @@ static void sig_handler(int signo)
|
|||||||
gshutdown = true;
|
gshutdown = true;
|
||||||
break;
|
break;
|
||||||
case SIGABRT:
|
case SIGABRT:
|
||||||
|
/* 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(tall_trx_ctx, stderr);
|
||||||
|
talloc_report_full(tall_trx_ctx, stderr);
|
||||||
|
signal(SIGABRT, SIG_DFL);
|
||||||
|
raise(SIGABRT);
|
||||||
|
break;
|
||||||
case SIGUSR1:
|
case SIGUSR1:
|
||||||
talloc_report(tall_trx_ctx, stderr);
|
talloc_report(tall_trx_ctx, stderr);
|
||||||
talloc_report_full(tall_trx_ctx, stderr);
|
talloc_report_full(tall_trx_ctx, stderr);
|
||||||
|
|||||||
Reference in New Issue
Block a user