bpo-38377: Fix skip_if_broken_multiprocessing_synchronize() on macOS (GH-20984)

skip_if_broken_multiprocessing_synchronize() only attempts for create
a semaphore on Linux to fix multiprocessing
test_resource_tracker_reused() on macOS.
(cherry picked from commit 3358da4054)

Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
Miss Islington (bot) 2020-06-19 09:20:15 -07:00 committed by GitHub
parent 83e54debac
commit 1529322ca6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 8 deletions

View File

@ -3174,7 +3174,7 @@ def skip_if_broken_multiprocessing_synchronize():
"""
Skip tests if the multiprocessing.synchronize module is missing, if there
is no available semaphore implementation, or if creating a lock raises an
OSError.
OSError (on Linux only).
"""
# Skip tests if the _multiprocessing extension is missing.
@ -3184,10 +3184,11 @@ def skip_if_broken_multiprocessing_synchronize():
# multiprocessing.synchronize requires _multiprocessing.SemLock.
synchronize = import_module('multiprocessing.synchronize')
if sys.platform == "linux":
try:
# bpo-38377: On Linux, creating a semaphore is the current user
# does not have the permission to create a file in /dev/shm.
# Create a semaphore to check permissions.
# bpo-38377: On Linux, creating a semaphore fails with OSError
# if the current user does not have the permission to create
# a file in /dev/shm/ directory.
synchronize.Lock(ctx=None)
except OSError as exc:
raise unittest.SkipTest(f"broken multiprocessing SemLock: {exc!r}")