From fe0ab16cc8e140dbd0d32f0d1c180ddf4ab94f8e Mon Sep 17 00:00:00 2001 From: "Peter F. Patel-Schneider" Date: Sat, 4 Jul 2020 09:34:47 -0400 Subject: [PATCH] misc: dump threads on SIGINT --- lib/solaar/gtk.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/solaar/gtk.py b/lib/solaar/gtk.py index 6faa99c4..c961345b 100755 --- a/lib/solaar/gtk.py +++ b/lib/solaar/gtk.py @@ -22,11 +22,17 @@ from __future__ import absolute_import, division, print_function, unicode_litera import importlib +from logging import INFO as _INFO +from logging import getLogger + import solaar.cli as _cli import solaar.i18n as _i18n from solaar import NAME, __version__ +_log = getLogger(__name__) +del getLogger + # # # @@ -100,12 +106,26 @@ def _parse_arguments(): return args +# On first SIGINT, dump threads to stderr; on second, exit +def _handlesigint(signal, stack): + import signal + import sys + import faulthandler + signal.signal(signal.SIGINT, signal.SIG_DFL) + + if _log.isEnabledFor(_INFO): + faulthandler.dump_traceback() + + sys.exit('%s: exit due to keyboard interrupt' % (NAME.lower())) + + def main(): _require('pyudev', 'python3-pyudev') # handle ^C in console import signal signal.signal(signal.SIGINT, signal.SIG_DFL) + signal.signal(signal.SIGINT, _handlesigint) args = _parse_arguments() if not args: