commit: fe5ee071915d06e451cf7cc66dd40abb00c3fca6 Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> AuthorDate: Tue Sep 8 06:15:25 2015 +0000 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> CommitDate: Sat Nov 21 01:31:28 2015 +0000 URL: https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=fe5ee071
Move the signal handler into the StageBase class so it can handle unbind() cleanup Not quite complete, still errors on some unmounting bin/catalyst | 19 ------------------- catalyst/base/stagebase.py | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/bin/catalyst b/bin/catalyst index 24122b2..8ba3348 100755 --- a/bin/catalyst +++ b/bin/catalyst @@ -12,25 +12,6 @@ from __future__ import print_function import sys -# This block ensures that ^C interrupts are handled quietly. -try: - import signal - - def exithandler(_signum, _frame): - signal.signal(signal.SIGINT, signal.SIG_IGN) - signal.signal(signal.SIGTERM, signal.SIG_IGN) - print() - sys.exit(1) - - signal.signal(signal.SIGINT, exithandler) - signal.signal(signal.SIGTERM, exithandler) - signal.signal(signal.SIGPIPE, signal.SIG_DFL) - -except KeyboardInterrupt: - print() - sys.exit(1) - - from catalyst.main import main try: diff --git a/catalyst/base/stagebase.py b/catalyst/base/stagebase.py index 62950b5..7e5396f 100644 --- a/catalyst/base/stagebase.py +++ b/catalyst/base/stagebase.py @@ -2,6 +2,7 @@ import os import imp import shutil +import signal import sys from stat import ST_UID, ST_GID, ST_MODE @@ -190,6 +191,17 @@ class StageBase(TargetBase, ClearBase, GenBase): if "portage_confdir" in self.settings: file_locate(self.settings,["portage_confdir"],expand=0) + + # This block ensures that ^C interrupts are handled quietly. + try: + signal.signal(signal.SIGINT, self.exithandler) + signal.signal(signal.SIGTERM, self.exithandler) + signal.signal(signal.SIGPIPE, signal.SIG_DFL) + + except KeyboardInterrupt: + print() + sys.exit(1) + # Setup our mount points. # initialize our target mounts. self.target_mounts = TARGET_MOUNT_DEFAULTS.copy() @@ -262,6 +274,13 @@ class StageBase(TargetBase, ClearBase, GenBase): # save resources, it is not always needed self.compressor = None + def exithandler(self, _signum, _frame): + signal.signal(signal.SIGINT, signal.SIG_IGN) + signal.signal(signal.SIGTERM, signal.SIG_IGN) + self.unbind() + print() + sys.exit(1) + def override_cbuild(self): if "CBUILD" in self.makeconf: self.settings["CBUILD"]=self.makeconf["CBUILD"]