blob: 566bef94e93cea7db9f0b1ad2b5360e9aa35659d [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import contextlib
import signal
@contextlib.contextmanager
def AddSignalHandler(signalnum, additional_handler):
"""Adds a signal handler for the given signal in the wrapped context.
This runs the new handler after any existing handler rather than
replacing the existing handler.
Args:
signum: The signal for which a handler should be added.
additional_handler: The handler to add.
"""
existing_handler = signal.getsignal(signalnum)
def handler(signum, frame):
if callable(existing_handler):
existing_handler(signum, frame)
additional_handler(signum, frame)
signal.signal(signalnum, handler)
yield
signal.signal(signalnum, existing_handler)