]> granicus.if.org Git - python/commitdiff
Get test_logging to not hang when running under regrtest.py -R ::
authorNeal Norwitz <nnorwitz@gmail.com>
Sun, 5 Feb 2006 08:21:08 +0000 (08:21 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Sun, 5 Feb 2006 08:21:08 +0000 (08:21 +0000)
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.

Lib/logging/__init__.py
Lib/test/test_logging.py

index 5a0b0f50213dce22df1c43f73fd4b4b73e81d63f..9fa8797bf12db63641f90a075ee29a698f61755c 100644 (file)
@@ -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()
index 799f05945447a27c11c7d396e90e78096b9de751..bcebc8332918893d3cef421751a59cc05cb80792 100644 (file)
@@ -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()