Backout the last hack and add in this new one.
The failure definitely seems timing related. This change *seems* to work.
Since the failure isn't doesn't occur consistently, it's hard to tell.
Running these tests on Solaris in this order:
test_urllibnet test_operator test_cgi \
test_isinstance test_future test_ast test_logging
generally caused a failure (about 50% of the time) before the sleep.
I couldn't provoke the failure with the sleep.
This should really be cleaned up by using threading.Events or something
so it is not timing dependent and doesn't hang forever on failure.
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 83c3b4f..b689dc8 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -98,22 +98,12 @@
self.abort = 0
self.timeout = 1
- def _wait_and_process_data(self):
- rd, wr, ex = select.select([self.socket.fileno()], [], [],
- self.timeout)
- if rd:
- self.handle_request()
-
def serve_until_stopped(self):
while not self.abort:
- self._wait_and_process_data()
-
- # XXX(nnorwitz): Try to fix timing related test failures.
- # It's possible self.aborted was set before the final message
- # was received. By calling _wait_and_process_data(),
- # it gives us one last chance to read messages.
- # The test generally only fails on Solaris.
- self._wait_and_process_data()
+ rd, wr, ex = select.select([self.socket.fileno()], [], [],
+ self.timeout)
+ if rd:
+ self.handle_request()
#notify the main thread that we're about to exit
socketDataProcessed.set()
# close the listen socket
@@ -633,6 +623,10 @@
rootLogger.addHandler(shdlr)
test0()
+ # XXX(nnorwitz): Try to fix timing related test failures.
+ # This sleep gives us some extra time to read messages.
+ # The test generally only fails on Solaris without this sleep.
+ time.sleep(2.0)
shdlr.close()
rootLogger.removeHandler(shdlr)