mirror of
https://github.com/python/cpython.git
synced 2025-08-23 02:04:56 +00:00
Issue #11223: Fix test_threadsignals to fail, not hang, when the
non-semaphore implementation of locks is used under POSIX.
This commit is contained in:
parent
0def5c6907
commit
d3cccd2a60
2 changed files with 20 additions and 2 deletions
|
@ -73,18 +73,29 @@ class ThreadSignals(unittest.TestCase):
|
||||||
def test_lock_acquire_interruption(self):
|
def test_lock_acquire_interruption(self):
|
||||||
# Mimic receiving a SIGINT (KeyboardInterrupt) with SIGALRM while stuck
|
# Mimic receiving a SIGINT (KeyboardInterrupt) with SIGALRM while stuck
|
||||||
# in a deadlock.
|
# in a deadlock.
|
||||||
|
# XXX this test can fail when the legacy (non-semaphore) implementation
|
||||||
|
# of locks is used in thread_pthread.h, see issue #11223.
|
||||||
oldalrm = signal.signal(signal.SIGALRM, self.alarm_interrupt)
|
oldalrm = signal.signal(signal.SIGALRM, self.alarm_interrupt)
|
||||||
try:
|
try:
|
||||||
lock = thread.allocate_lock()
|
lock = thread.allocate_lock()
|
||||||
lock.acquire()
|
lock.acquire()
|
||||||
signal.alarm(1)
|
signal.alarm(1)
|
||||||
self.assertRaises(KeyboardInterrupt, lock.acquire)
|
t1 = time.time()
|
||||||
|
self.assertRaises(KeyboardInterrupt, lock.acquire, timeout=5)
|
||||||
|
dt = time.time() - t1
|
||||||
|
# Checking that KeyboardInterrupt was raised is not sufficient.
|
||||||
|
# We want to assert that lock.acquire() was interrupted because
|
||||||
|
# of the signal, not that the signal handler was called immediately
|
||||||
|
# after timeout return of lock.acquire() (which can fool assertRaises).
|
||||||
|
self.assertLess(dt, 3.0)
|
||||||
finally:
|
finally:
|
||||||
signal.signal(signal.SIGALRM, oldalrm)
|
signal.signal(signal.SIGALRM, oldalrm)
|
||||||
|
|
||||||
def test_rlock_acquire_interruption(self):
|
def test_rlock_acquire_interruption(self):
|
||||||
# Mimic receiving a SIGINT (KeyboardInterrupt) with SIGALRM while stuck
|
# Mimic receiving a SIGINT (KeyboardInterrupt) with SIGALRM while stuck
|
||||||
# in a deadlock.
|
# in a deadlock.
|
||||||
|
# XXX this test can fail when the legacy (non-semaphore) implementation
|
||||||
|
# of locks is used in thread_pthread.h, see issue #11223.
|
||||||
oldalrm = signal.signal(signal.SIGALRM, self.alarm_interrupt)
|
oldalrm = signal.signal(signal.SIGALRM, self.alarm_interrupt)
|
||||||
try:
|
try:
|
||||||
rlock = thread.RLock()
|
rlock = thread.RLock()
|
||||||
|
@ -98,7 +109,11 @@ class ThreadSignals(unittest.TestCase):
|
||||||
rlock.release()
|
rlock.release()
|
||||||
time.sleep(0.01)
|
time.sleep(0.01)
|
||||||
signal.alarm(1)
|
signal.alarm(1)
|
||||||
self.assertRaises(KeyboardInterrupt, rlock.acquire)
|
t1 = time.time()
|
||||||
|
self.assertRaises(KeyboardInterrupt, rlock.acquire, timeout=5)
|
||||||
|
dt = time.time() - t1
|
||||||
|
# See rationale above in test_lock_acquire_interruption
|
||||||
|
self.assertLess(dt, 3.0)
|
||||||
finally:
|
finally:
|
||||||
signal.signal(signal.SIGALRM, oldalrm)
|
signal.signal(signal.SIGALRM, oldalrm)
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,9 @@ Tools/Demos
|
||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Issue #11223: Fix test_threadsignals to fail, not hang, when the
|
||||||
|
non-semaphore implementation of locks is used under POSIX.
|
||||||
|
|
||||||
- Issue #10911: Add tests on CGI with non-ASCII characters. Patch written by
|
- Issue #10911: Add tests on CGI with non-ASCII characters. Patch written by
|
||||||
Pierre Quentel.
|
Pierre Quentel.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue