Commit 55cd82fe authored by Neal Norwitz's avatar Neal Norwitz

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.
parent 0e6bc8c2
...@@ -671,7 +671,8 @@ class Handler(Filterer): ...@@ -671,7 +671,8 @@ class Handler(Filterer):
#get the module data lock, as we're updating a shared structure. #get the module data lock, as we're updating a shared structure.
_acquireLock() _acquireLock()
try: #unlikely to raise an exception, but you never know... try: #unlikely to raise an exception, but you never know...
del _handlers[self] if _handlers.has_key(self):
del _handlers[self]
_handlerList.remove(self) _handlerList.remove(self)
finally: finally:
_releaseLock() _releaseLock()
......
...@@ -99,14 +99,12 @@ class LogRecordSocketReceiver(ThreadingTCPServer): ...@@ -99,14 +99,12 @@ class LogRecordSocketReceiver(ThreadingTCPServer):
self.timeout = 1 self.timeout = 1
def serve_until_stopped(self): def serve_until_stopped(self):
abort = 0 while not self.abort:
while not abort:
rd, wr, ex = select.select([self.socket.fileno()], rd, wr, ex = select.select([self.socket.fileno()],
[], [], [], [],
self.timeout) self.timeout)
if rd: if rd:
self.handle_request() self.handle_request()
abort = self.abort
#notify the main thread that we're about to exit #notify the main thread that we're about to exit
socketDataProcessed.set() socketDataProcessed.set()
# close the listen socket # close the listen socket
...@@ -620,8 +618,10 @@ def test_main_inner(): ...@@ -620,8 +618,10 @@ def test_main_inner():
finally: finally:
#wait for TCP receiver to terminate #wait for TCP receiver to terminate
socketDataProcessed.wait() socketDataProcessed.wait()
# ensure the server dies
tcpserver.abort = 1
for thread in threads: for thread in threads:
thread.join() thread.join(2.0)
banner("logrecv output", "begin") banner("logrecv output", "begin")
sys.stdout.write(sockOut.getvalue()) sys.stdout.write(sockOut.getvalue())
sockOut.close() sockOut.close()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment