mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
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.
This commit is contained in:
parent
0e6bc8c260
commit
55cd82fe0a
2 changed files with 6 additions and 5 deletions
|
@ -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):
|
||||||
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():
|
||||||
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()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue