From: Neal Norwitz Date: Sun, 5 Feb 2006 08:21:08 +0000 (+0000) Subject: Get test_logging to not hang when running under regrtest.py -R :: X-Git-Tag: v2.5a0~715 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=55cd82fe0adc0a7ceb93eb1b6e9de6a25fd7adb9;p=thirdparty%2FPython%2Fcpython.git Get test_logging to not hang when running under regrtest.py -R :: Not sure why/how _handlers/_handlerList is out of sync. This could indicate a deeper problem. In test_logging, the only absolutely necessary change to get working was tcpserver.abort = 1. But we don't want to wait infinitely to join the threads, so give a 2.0 second timeout. There doesn't appear to be a need for a local abort variable in serve_until_stopped, so just use the instance member. Note the problem is only on HEAD, not in 2.4. --- diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index 5a0b0f50213d..9fa8797bf12d 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -671,7 +671,8 @@ class Handler(Filterer): #get the module data lock, as we're updating a shared structure. _acquireLock() try: #unlikely to raise an exception, but you never know... - del _handlers[self] + if _handlers.has_key(self): + del _handlers[self] _handlerList.remove(self) finally: _releaseLock() diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 799f05945447..bcebc8332918 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -99,14 +99,12 @@ class LogRecordSocketReceiver(ThreadingTCPServer): self.timeout = 1 def serve_until_stopped(self): - abort = 0 - while not abort: + while not self.abort: rd, wr, ex = select.select([self.socket.fileno()], [], [], self.timeout) if rd: self.handle_request() - abort = self.abort #notify the main thread that we're about to exit socketDataProcessed.set() # close the listen socket @@ -620,8 +618,10 @@ def test_main_inner(): finally: #wait for TCP receiver to terminate socketDataProcessed.wait() + # ensure the server dies + tcpserver.abort = 1 for thread in threads: - thread.join() + thread.join(2.0) banner("logrecv output", "begin") sys.stdout.write(sockOut.getvalue()) sockOut.close()