[PATCH] tester: Avoid TFTP race condition

Gedare Bloom gedare at rtems.org
Tue May 18 15:53:52 UTC 2021


seems ok, but is there a way to set a timeout in case the client
doesn't send a final ACK?  Typical kind of network problem.

On Mon, May 17, 2021 at 12:29 PM Kinsey Moore <kinsey.moore at oarcorp.com> wrote:
>
> 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.
> ---
>  tester/rt/tftpserver.py | 4 ++--
>  1 file 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))
> --
> 2.20.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list