Index: devil/devil/utils/signal_handler.py |
diff --git a/devil/devil/utils/signal_handler.py b/devil/devil/utils/signal_handler.py |
index 566bef94e93cea7db9f0b1ad2b5360e9aa35659d..1230f8df5f394efda4400e0d7a0a38b0cb3f40e9 100644 |
--- a/devil/devil/utils/signal_handler.py |
+++ b/devil/devil/utils/signal_handler.py |
@@ -7,6 +7,23 @@ import signal |
@contextlib.contextmanager |
+def SignalHandler(signalnum, handler): |
+ """Sets the signal handler for the given signal in the wrapped context. |
+ |
+ Args: |
+ signum: The signal for which a handler should be added. |
+ additional_handler: The handler to add. |
+ """ |
+ existing_handler = signal.getsignal(signalnum) |
+ |
+ try: |
+ signal.signal(signalnum, handler) |
+ yield |
+ finally: |
+ signal.signal(signalnum, existing_handler) |
+ |
+ |
+@contextlib.contextmanager |
def AddSignalHandler(signalnum, additional_handler): |
"""Adds a signal handler for the given signal in the wrapped context. |
@@ -24,7 +41,8 @@ def AddSignalHandler(signalnum, additional_handler): |
existing_handler(signum, frame) |
additional_handler(signum, frame) |
- signal.signal(signalnum, handler) |
- yield |
- signal.signal(signalnum, existing_handler) |
- |
+ try: |
+ signal.signal(signalnum, handler) |
+ yield |
+ finally: |
+ signal.signal(signalnum, existing_handler) |