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:
parent
ba43774d1c
commit
2b860db35c
|
@ -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():
|
||||||
|
|
Loading…
Reference in New Issue