summaryrefslogtreecommitdiffstats
path: root/tester/rt
diff options
context:
space:
mode:
authorKinsey Moore <kinsey.moore@oarcorp.com>2021-05-17 13:24:48 -0500
committerJoel Sherrill <joel@rtems.org>2021-05-18 13:58:34 -0500
commita918844889eb603622bb78f81139a5e20a71ab6b (patch)
treef116ecf8ca5ae745e0d36d3e579ee14720cd6be8 /tester/rt
parentrtemstoolkit/mailer.py: Fix option ordering for add_arguments (diff)
downloadrtems-tools-a918844889eb603622bb78f81139a5e20a71ab6b.tar.bz2
tester: Avoid TFTP race condition
The u-boot TFTP client will fail a fully completed file retrieval if the final ACK gets an ICMP response that the port is unavailable which can occur if the port is closed before the ACK arrives from the client. This change causes the TFTP server to wait for the final ACK before closing the socket and prevents transfers from failing due to the race condition.
Diffstat (limited to 'tester/rt')
-rw-r--r--tester/rt/tftpserver.py4
1 files changed, 2 insertions, 2 deletions
diff --git a/tester/rt/tftpserver.py b/tester/rt/tftpserver.py
index d733301..46b594f 100644
--- a/tester/rt/tftpserver.py
+++ b/tester/rt/tftpserver.py
@@ -418,8 +418,6 @@ class udp_handler(socketserver.BaseRequestHandler):
' < ' +
session.decode(client_ip, client_port, response))
sock.sendto(response, (client_ip, client_port))
- if session.finished:
- break
try:
data, address = sock.recvfrom(2 + 2 +
session.get_block_size())
@@ -438,6 +436,8 @@ class udp_handler(socketserver.BaseRequestHandler):
log.trace('] tftp: %d: receive: %s: error: %s' \
% (index, client, serr))
return
+ if session.finished:
+ break
response = session.process(address[0], address[1], data)
except error.general as gerr:
self._notice('] tftp: %dd: error: %s' % (index, gerr))