(original) (raw)
changeset: 68421:5d0d488cbca8 branch: 3.2 parent: 68413:4a68f4cfbdc8 user: Antoine Pitrou solipsis@pitrou.net date: Sun Mar 13 19:14:21 2011 +0100 files: Lib/test/test_threadsignals.py Misc/NEWS description: Issue #11223: Fix test_threadsignals to fail, not hang, when the non-semaphore implementation of locks is used under POSIX. diff -r 4a68f4cfbdc8 -r 5d0d488cbca8 Lib/test/test_threadsignals.py --- a/Lib/test/test_threadsignals.py Sun Mar 13 02:27:26 2011 +0200 +++ b/Lib/test/test_threadsignals.py Sun Mar 13 19:14:21 2011 +0100 @@ -73,18 +73,29 @@ 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 @@ 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) diff -r 4a68f4cfbdc8 -r 5d0d488cbca8 Misc/NEWS --- a/Misc/NEWS Sun Mar 13 02:27:26 2011 +0200 +++ b/Misc/NEWS Sun Mar 13 19:14:21 2011 +0100 @@ -92,6 +92,9 @@ 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. /solipsis@pitrou.net