Doh! os.read() raises an OSError, not an IOError when it's interrupted.

And fix some flakiness in test_itimer_prof, which could detect that the timer
had reached 0 before the signal arrived announcing that fact.
This commit is contained in:
Jeffrey Yasskin 2008-04-04 04:51:19 +00:00
parent ba43774d1c
commit 2b860db35c
1 changed files with 5 additions and 2 deletions

View File

@ -31,7 +31,7 @@ def exit_subprocess():
def ignoring_eintr(__func, *args, **kwargs): def ignoring_eintr(__func, *args, **kwargs):
try: try:
return __func(*args, **kwargs) return __func(*args, **kwargs)
except IOError as e: except EnvironmentError as e:
if e.errno != signal.EINTR: if e.errno != signal.EINTR:
raise raise
return None return None
@ -363,12 +363,15 @@ class ItimerTest(unittest.TestCase):
def test_itimer_prof(self): def test_itimer_prof(self):
self.itimer = signal.ITIMER_PROF self.itimer = signal.ITIMER_PROF
signal.signal(signal.SIGPROF, self.sig_prof) signal.signal(signal.SIGPROF, self.sig_prof)
signal.setitimer(self.itimer, 0.2) signal.setitimer(self.itimer, 0.2, 0.2)
for i in xrange(100000000): for i in xrange(100000000):
if signal.getitimer(self.itimer) == (0.0, 0.0): if signal.getitimer(self.itimer) == (0.0, 0.0):
break # sig_prof handler stopped this itimer break # sig_prof handler stopped this itimer
# profiling itimer should be (0.0, 0.0) now
self.assertEquals(signal.getitimer(self.itimer), (0.0, 0.0))
# and the handler should have been called
self.assertEqual(self.hndl_called, True) self.assertEqual(self.hndl_called, True)
def test_main(): def test_main():