There was a race condition where the connector would try to connect

before the listener was ready (on gentoo x86 buildslave).  This
caused the listener to not exit normally since nobody connected to it
(waited in accept()).  The exception was raised in the other thread
and the test failed.

This fix doesn't completely eliminate the race, but should make it
near impossible to trigger.  Hopefully it's good enough.
This commit is contained in:
Neal Norwitz 2006-01-25 08:39:35 +00:00
parent 14361fffc2
commit 08e301f8bd
1 changed files with 3 additions and 0 deletions

View File

@ -35,6 +35,7 @@ def test_rude_shutdown():
# Some random port to connect to.
PORT = 9934
listener_ready = threading.Event()
listener_gone = threading.Event()
# `listener` runs in a thread. It opens a socket listening on PORT, and
@ -45,11 +46,13 @@ def test_rude_shutdown():
s = socket.socket()
s.bind(('', PORT))
s.listen(5)
listener_ready.set()
s.accept()
s = None # reclaim the socket object, which also closes it
listener_gone.set()
def connector():
listener_ready.wait()
s = socket.socket()
s.connect(('localhost', PORT))
listener_gone.wait()