diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2011-03-13 18:14:21 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2011-03-13 18:14:21 (GMT) |
commit | d3cccd2a60914caef40ada0c16e90da4fc4270b3 (patch) | |
tree | e9d3ea580d0d78d5a12e2c25fbbfb5c74e33e15a | |
parent | 0def5c69070c80093af1e05266c61d053aaba3e1 (diff) | |
download | cpython-d3cccd2a60914caef40ada0c16e90da4fc4270b3.zip cpython-d3cccd2a60914caef40ada0c16e90da4fc4270b3.tar.gz cpython-d3cccd2a60914caef40ada0c16e90da4fc4270b3.tar.bz2 |
Issue #11223: Fix test_threadsignals to fail, not hang, when the
non-semaphore implementation of locks is used under POSIX.
-rw-r--r-- | Lib/test/test_threadsignals.py | 19 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
2 files changed, 20 insertions, 2 deletions
diff --git a/Lib/test/test_threadsignals.py b/Lib/test/test_threadsignals.py index 2462307..46e405a 100644 --- a/Lib/test/test_threadsignals.py +++ b/Lib/test/test_threadsignals.py @@ -73,18 +73,29 @@ class ThreadSignals(unittest.TestCase): def test_lock_acquire_interruption(self): # Mimic receiving a SIGINT (KeyboardInterrupt) with SIGALRM while stuck # 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) try: lock = thread.allocate_lock() lock.acquire() 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: signal.signal(signal.SIGALRM, oldalrm) def test_rlock_acquire_interruption(self): # Mimic receiving a SIGINT (KeyboardInterrupt) with SIGALRM while stuck # 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) try: rlock = thread.RLock() @@ -98,7 +109,11 @@ class ThreadSignals(unittest.TestCase): rlock.release() time.sleep(0.01) 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: signal.signal(signal.SIGALRM, oldalrm) @@ -92,6 +92,9 @@ Tools/Demos 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 Pierre Quentel. |