summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-07-25 08:42:38 (GMT)
committerGitHub <noreply@github.com>2024-07-25 08:42:38 (GMT)
commit977c7992860a58f7a48bcdac53a99e67e5bb9b9c (patch)
treeb8aab161f67aa1c70d57d0de5666f4f9aad27230
parent6933c4ace915d3143e79d90b918b6fd600c3d0e6 (diff)
downloadcpython-977c7992860a58f7a48bcdac53a99e67e5bb9b9c.zip
cpython-977c7992860a58f7a48bcdac53a99e67e5bb9b9c.tar.gz
cpython-977c7992860a58f7a48bcdac53a99e67e5bb9b9c.tar.bz2
[3.13] gh-122187: Avoid TSan reported race in `run_udp_echo_server` (GH-122189) (#122263)
gh-122187: Avoid TSan reported race in `run_udp_echo_server` (GH-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. (cherry picked from commit 2f74b709b637cad7a9c18a2d90b0747823f2ff51) Co-authored-by: Sam Gross <colesbury@gmail.com>
-rw-r--r--Lib/test/test_asyncio/utils.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/Lib/test/test_asyncio/utils.py b/Lib/test/test_asyncio/utils.py
index 44943e1..ce2408f 100644
--- a/Lib/test/test_asyncio/utils.py
+++ b/Lib/test/test_asyncio/utils.py
@@ -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()