summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2021-05-09 22:20:23 +0200
committerMichał Górny <mgorny@gentoo.org>2021-05-09 22:24:41 +0200
commite536d2fd0a5a0ace16a215b6bc900d3bee623bc3 (patch)
tree6b604f3b251de5992a05f91509525bf660a25df7 /sys-apps/pkgcore/files
parentdev-util/pkgcheck: Extend py3.10 fix to 9999 (diff)
downloadgentoo-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.patch56
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
+