summaryrefslogtreecommitdiffstats
path: root/pym/portage/exception.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-09-03 17:11:03 -0700
committerZac Medico <zmedico@gentoo.org>2010-09-03 17:11:03 -0700
commit77fb8383288425e1b79d8092828da0b87e6293aa (patch)
treedee8bdc843b8b6549a65a84013506074339320f6 /pym/portage/exception.py
parent1959bfc2a30aa6160dfa0b454f3af0a545bf40f0 (diff)
downloadportage-77fb8383288425e1b79d8092828da0b87e6293aa.tar.gz
portage-77fb8383288425e1b79d8092828da0b87e6293aa.tar.bz2
portage-77fb8383288425e1b79d8092828da0b87e6293aa.zip
Add AlarmSignal.register() and unregister() classmethods in order to
handle interaction with the signal module.
Diffstat (limited to 'pym/portage/exception.py')
-rw-r--r--pym/portage/exception.py12
1 files changed, 11 insertions, 1 deletions
diff --git a/pym/portage/exception.py b/pym/portage/exception.py
index b0f9ad8eb..dca1100e6 100644
--- a/pym/portage/exception.py
+++ b/pym/portage/exception.py
@@ -1,6 +1,7 @@
# Copyright 1998-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
+import signal
import sys
from portage import _unicode_encode, _unicode_decode
from portage.localization import _
@@ -90,7 +91,16 @@ class AlarmSignal(TimeoutException):
self.frame = frame
@classmethod
- def signal_handler(cls, signum, frame):
+ def register(cls):
+ signal.signal(signal.SIGALRM, cls._signal_handler)
+
+ @classmethod
+ def unregister(cls):
+ signal.alarm(0)
+ signal.signal(signal.SIGALRM, signal.SIG_DFL)
+
+ @classmethod
+ def _signal_handler(cls, signum, frame):
raise AlarmSignal("alarm signal",
signum=signum, frame=frame)