diff options
author | 2021-05-09 22:20:23 +0200 | |
---|---|---|
committer | 2021-05-09 22:24:41 +0200 | |
commit | e536d2fd0a5a0ace16a215b6bc900d3bee623bc3 (patch) | |
tree | 6b604f3b251de5992a05f91509525bf660a25df7 /sys-apps/pkgcore/files | |
parent | dev-util/pkgcheck: Extend py3.10 fix to 9999 (diff) | |
download | gentoo-e536d2fd0a5a0ace16a215b6bc900d3bee623bc3.tar.gz gentoo-e536d2fd0a5a0ace16a215b6bc900d3bee623bc3.tar.bz2 gentoo-e536d2fd0a5a0ace16a215b6bc900d3bee623bc3.zip |
sys-apps/pkgcore: Fix pmaint hang due to signal handler setup
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'sys-apps/pkgcore/files')
-rw-r--r-- | sys-apps/pkgcore/files/pkgcore-0.10.18-sighdlr-2.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/sys-apps/pkgcore/files/pkgcore-0.10.18-sighdlr-2.patch b/sys-apps/pkgcore/files/pkgcore-0.10.18-sighdlr-2.patch new file mode 100644 index 000000000000..d5ab23c42822 --- /dev/null +++ b/sys-apps/pkgcore/files/pkgcore-0.10.18-sighdlr-2.patch @@ -0,0 +1,56 @@ +From 9faa4288ce0b9f90292e9afc2777ce62317d861a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org> +Date: Sun, 9 May 2021 21:36:32 +0200 +Subject: [PATCH] ebuild.processor: Ensure that signal handlers are set only + once + +Prevent the signal.signal() calls from being made more than once. This +was changed in 533f1edd70054a5479ee85719d3cbef0d15627fd when the calls +were moved to EbuildProcessor's __init__ method. However, it seems +to cause 'pmaint regen' to hang randomly which keeps blocking Gentoo +git repository mirrors. + +Fixes #307 +--- + src/pkgcore/ebuild/processor.py | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/src/pkgcore/ebuild/processor.py b/src/pkgcore/ebuild/processor.py +index 323e7e9a..384dc1f0 100644 +--- a/src/pkgcore/ebuild/processor.py ++++ b/src/pkgcore/ebuild/processor.py +@@ -24,7 +24,7 @@ import os + import signal + import threading + import traceback +-from functools import partial, wraps ++from functools import partial, wraps, lru_cache + from itertools import chain + + from snakeoil import bash, fileutils, klass +@@ -297,6 +297,12 @@ def chuck_StoppingCommand(ebp, line): + raise ProcessorError(args[1]) + + ++@lru_cache(maxsize=None) ++def set_signal_handlers(): ++ signal.signal(signal.SIGTERM, partial(chuck_TermInterrupt, None)) ++ signal.signal(signal.SIGINT, chuck_KeyboardInterrupt) ++ ++ + class EbuildProcessor: + """Abstraction of a running ebd instance. + +@@ -320,8 +326,7 @@ class EbuildProcessor: + self._outstanding_expects = [] + self._metadata_paths = None + +- signal.signal(signal.SIGTERM, partial(chuck_TermInterrupt, None)) +- signal.signal(signal.SIGINT, chuck_KeyboardInterrupt) ++ set_signal_handlers() + + spawn_opts = {'umask': 0o002} + if self.userpriv: +-- +2.31.1 + |