From 0ff76bdc9df99c0d0e2d5ea6d82eb6d99178bb13 Mon Sep 17 00:00:00 2001 From: Marian Beermann Date: Mon, 26 Dec 2016 15:29:22 +0100 Subject: [PATCH 1/2] dump a trace on SIGUSR2 --- borg/archiver.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/borg/archiver.py b/borg/archiver.py index 8a243f890..6fa6c5756 100644 --- a/borg/archiver.py +++ b/borg/archiver.py @@ -3,6 +3,7 @@ from hashlib import sha256 from operator import attrgetter import argparse +import faulthandler import functools import inspect import os @@ -2021,6 +2022,11 @@ def sig_info_handler(sig_no, stack): # pragma: no cover break +def sig_trace_handler(sig_no, stack): # pragma: no cover + print('\nReceived SIGUSR2 at %s, dumping trace...' % datetime.now().replace(microsecond=0), file=sys.stderr) + faulthandler.dump_traceback() + + def main(): # pragma: no cover # Make sure stdout and stderr have errors='replace') to avoid unicode # issues when print()-ing unicode file names @@ -2036,6 +2042,7 @@ def main(): # pragma: no cover signal_handler('SIGHUP', raising_signal_handler(SigHup)), \ signal_handler('SIGTERM', raising_signal_handler(SigTerm)), \ signal_handler('SIGUSR1', sig_info_handler), \ + signal_handler('SIGUSR2', sig_trace_handler), \ signal_handler('SIGINFO', sig_info_handler): archiver = Archiver() msg = None From c2c31aa13a3b7d59bbd319fa24cbb7fcf33daa9a Mon Sep 17 00:00:00 2001 From: Marian Beermann Date: Mon, 26 Dec 2016 15:29:30 +0100 Subject: [PATCH 2/2] enable faulthandler --- borg/archiver.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/borg/archiver.py b/borg/archiver.py index 6fa6c5756..7ad2195d8 100644 --- a/borg/archiver.py +++ b/borg/archiver.py @@ -2038,6 +2038,9 @@ def main(): # pragma: no cover # SIGHUP is important especially for systemd systems, where logind # sends it when a session exits, in addition to any traditional use. # Output some info if we receive SIGUSR1 or SIGINFO (ctrl-t). + + # Register fault handler for SIGSEGV, SIGFPE, SIGABRT, SIGBUS and SIGILL. + faulthandler.enable() with signal_handler('SIGINT', raising_signal_handler(KeyboardInterrupt)), \ signal_handler('SIGHUP', raising_signal_handler(SigHup)), \ signal_handler('SIGTERM', raising_signal_handler(SigTerm)), \