Skip to content

Commit

Permalink
pythongh-122187: Avoid TSan reported race in run_udp_echo_server (p…
Browse files Browse the repository at this point in the history
…ython#122189)

TSan doesn't fully recognize the synchronization via I/O, so ensure that
socket name is retrieved earlier and use a different socket for sending
the "STOP" message.
  • Loading branch information
colesbury authored Jul 25, 2024
1 parent bb10858 commit 2f74b70
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions Lib/test/test_asyncio/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,12 +301,17 @@ def run_udp_echo_server(*, host='127.0.0.1', port=0):
family, type, proto, _, sockaddr = addr_info[0]
sock = socket.socket(family, type, proto)
sock.bind((host, port))
sockname = sock.getsockname()
thread = threading.Thread(target=lambda: echo_datagrams(sock))
thread.start()
try:
yield sock.getsockname()
yield sockname
finally:
sock.sendto(b'STOP', sock.getsockname())
# gh-122187: use a separate socket to send the stop message to avoid
# TSan reported race on the same socket.
sock2 = socket.socket(family, type, proto)
sock2.sendto(b'STOP', sockname)
sock2.close()
thread.join()


Expand Down

0 comments on commit 2f74b70

Please sign in to comment.