closes bpo-34004: Skip lock interruption tests on musl. (GH-9224)

Returning EINTR from pthread semaphore or lock acquisition is an optional POSIX
feature. musl does not provide this feature, so some threadsignal tests fail
when Python is built against it.

There's no good way to test for musl, so we skip if we're on Linux and not using
glibc pthreads.

Also, hedge in the threading documentation about when we can provide interrupts
from lock acquisition.
(cherry picked from commit 5b10d5111d)

Co-authored-by: Benjamin Peterson <benjamin@python.org>
This commit is contained in:
Miss Islington (bot) 2018-09-12 14:10:56 -07:00 committed by GitHub
parent 329ea4ef7c
commit b608fcd444
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 1 deletions

View File

@ -400,7 +400,8 @@ All methods are executed atomically.
The *timeout* parameter is new. The *timeout* parameter is new.
.. versionchanged:: 3.2 .. versionchanged:: 3.2
Lock acquires can now be interrupted by signals on POSIX. Lock acquisition can now be interrupted by signals on POSIX if the
underlying threading implementation supports it.
.. method:: release() .. method:: release()

View File

@ -78,6 +78,10 @@ class ThreadSignals(unittest.TestCase):
@unittest.skipIf(USING_PTHREAD_COND, @unittest.skipIf(USING_PTHREAD_COND,
'POSIX condition variables cannot be interrupted') 'POSIX condition variables cannot be interrupted')
@unittest.skipIf(sys.platform.startswith('linux') and
not sys.thread_info.version,
'Issue 34004: musl does not allow interruption of locks '
'by signals.')
# Issue #20564: sem_timedwait() cannot be interrupted on OpenBSD # Issue #20564: sem_timedwait() cannot be interrupted on OpenBSD
@unittest.skipIf(sys.platform.startswith('openbsd'), @unittest.skipIf(sys.platform.startswith('openbsd'),
'lock cannot be interrupted on OpenBSD') 'lock cannot be interrupted on OpenBSD')
@ -105,6 +109,10 @@ class ThreadSignals(unittest.TestCase):
@unittest.skipIf(USING_PTHREAD_COND, @unittest.skipIf(USING_PTHREAD_COND,
'POSIX condition variables cannot be interrupted') 'POSIX condition variables cannot be interrupted')
@unittest.skipIf(sys.platform.startswith('linux') and
not sys.thread_info.version,
'Issue 34004: musl does not allow interruption of locks '
'by signals.')
# Issue #20564: sem_timedwait() cannot be interrupted on OpenBSD # Issue #20564: sem_timedwait() cannot be interrupted on OpenBSD
@unittest.skipIf(sys.platform.startswith('openbsd'), @unittest.skipIf(sys.platform.startswith('openbsd'),
'lock cannot be interrupted on OpenBSD') 'lock cannot be interrupted on OpenBSD')