summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo van Kemenade <1324225+hugovk@users.noreply.github.com>2024-12-16 18:18:02 (GMT)
committerGitHub <noreply@github.com>2024-12-16 18:18:02 (GMT)
commit1d276ec6f8403590a6a1a18c560ce75b9221572b (patch)
treeeb45452944131db0fc07ed384e90db708f5bc093
parente4981e33b82ac14cca0f2d9b95257301fa201810 (diff)
downloadcpython-1d276ec6f8403590a6a1a18c560ce75b9221572b.zip
cpython-1d276ec6f8403590a6a1a18c560ce75b9221572b.tar.gz
cpython-1d276ec6f8403590a6a1a18c560ce75b9221572b.tar.bz2
Revert "gh-127586: properly restore blocked signals in resource_tracker.py (GH-127587)" (#127983)
This reverts commit 46006a1b355f75d06c10e7b8086912c483b34487.
-rw-r--r--Lib/multiprocessing/resource_tracker.py7
-rw-r--r--Lib/test/_test_multiprocessing.py15
-rw-r--r--Misc/NEWS.d/next/Library/2024-12-03-20-28-08.gh-issue-127586.zgotYF.rst3
3 files changed, 3 insertions, 22 deletions
diff --git a/Lib/multiprocessing/resource_tracker.py b/Lib/multiprocessing/resource_tracker.py
index 90e036a..20ddd9c 100644
--- a/Lib/multiprocessing/resource_tracker.py
+++ b/Lib/multiprocessing/resource_tracker.py
@@ -155,14 +155,13 @@ class ResourceTracker(object):
# that can make the child die before it registers signal handlers
# for SIGINT and SIGTERM. The mask is unregistered after spawning
# the child.
- prev_sigmask = None
try:
if _HAVE_SIGMASK:
- prev_sigmask = signal.pthread_sigmask(signal.SIG_BLOCK, _IGNORED_SIGNALS)
+ signal.pthread_sigmask(signal.SIG_BLOCK, _IGNORED_SIGNALS)
pid = util.spawnv_passfds(exe, args, fds_to_pass)
finally:
- if prev_sigmask is not None:
- signal.pthread_sigmask(signal.SIG_SETMASK, prev_sigmask)
+ if _HAVE_SIGMASK:
+ signal.pthread_sigmask(signal.SIG_UNBLOCK, _IGNORED_SIGNALS)
except:
os.close(w)
raise
diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
index 01e92f0..80b08b8 100644
--- a/Lib/test/_test_multiprocessing.py
+++ b/Lib/test/_test_multiprocessing.py
@@ -6044,21 +6044,6 @@ class TestResourceTracker(unittest.TestCase):
self._test_resource_tracker_leak_resources(
cleanup=cleanup,
)
- @unittest.skipUnless(hasattr(signal, "pthread_sigmask"), "pthread_sigmask is not available")
- def test_resource_tracker_blocked_signals(self):
- #
- # gh-127586: Check that resource_tracker does not override blocked signals of caller.
- #
- from multiprocessing.resource_tracker import ResourceTracker
- signals = {signal.SIGTERM, signal.SIGINT, signal.SIGUSR1}
-
- for sig in signals:
- signal.pthread_sigmask(signal.SIG_SETMASK, {sig})
- self.assertEqual(signal.pthread_sigmask(signal.SIG_BLOCK, set()), {sig})
- tracker = ResourceTracker()
- tracker.ensure_running()
- self.assertEqual(signal.pthread_sigmask(signal.SIG_BLOCK, set()), {sig})
- tracker._stop()
class TestSimpleQueue(unittest.TestCase):
diff --git a/Misc/NEWS.d/next/Library/2024-12-03-20-28-08.gh-issue-127586.zgotYF.rst b/Misc/NEWS.d/next/Library/2024-12-03-20-28-08.gh-issue-127586.zgotYF.rst
deleted file mode 100644
index 80217bd..0000000
--- a/Misc/NEWS.d/next/Library/2024-12-03-20-28-08.gh-issue-127586.zgotYF.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-:class:`multiprocessing.pool.Pool` now properly restores blocked signal handlers
-of the parent thread when creating processes via either *spawn* or
-*forkserver*.