diff options
author | Mike Frysinger <vapier@google.com> | 2023-06-15 19:59:32 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-06-15 19:59:32 +0000 |
commit | 4821b38054bd785a835b3de359d1ed59e78fa6c5 (patch) | |
tree | 9138edbe6bf853c1961f0b8e0eeba459ce7a1e87 | |
parent | d9f88104bfaee146d378b4be7495a498b6cc3631 (diff) | |
parent | c4291c3fb793a21c1f0046e40a97960ba4bd84dd (diff) | |
download | repohooks-4821b38054bd785a835b3de359d1ed59e78fa6c5.tar.gz |
utils: handle signal errors with threads am: c4291c3fb7
Original change: https://android-review.googlesource.com/c/platform/tools/repohooks/+/2621729
Change-Id: I2fe971a4fe53c58a3ed04a88903e24261bcc6b66
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | rh/utils.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/rh/utils.py b/rh/utils.py index 157e31b..4f1a063 100644 --- a/rh/utils.py +++ b/rh/utils.py @@ -369,18 +369,27 @@ def run(cmd, redirect_stdout=False, redirect_stderr=False, cwd=None, input=None, old_sigint = signal.getsignal(signal.SIGINT) handler = functools.partial(_kill_child_process, proc, int_timeout, kill_timeout, cmd, old_sigint) - signal.signal(signal.SIGINT, handler) + # We have to ignore ValueError in case we're run from a thread. + try: + signal.signal(signal.SIGINT, handler) + except ValueError: + old_sigint = None old_sigterm = signal.getsignal(signal.SIGTERM) handler = functools.partial(_kill_child_process, proc, int_timeout, kill_timeout, cmd, old_sigterm) - signal.signal(signal.SIGTERM, handler) + try: + signal.signal(signal.SIGTERM, handler) + except ValueError: + old_sigterm = None try: (result.stdout, result.stderr) = proc.communicate(input) finally: - signal.signal(signal.SIGINT, old_sigint) - signal.signal(signal.SIGTERM, old_sigterm) + if old_sigint is not None: + signal.signal(signal.SIGINT, old_sigint) + if old_sigterm is not None: + signal.signal(signal.SIGTERM, old_sigterm) if popen_stdout: # The linter is confused by how stdout is a file & an int. |