From 8c41aba12710be4bc5e9ecdede3290584a2304d6 Mon Sep 17 00:00:00 2001 From: redoste Date: Mon, 29 May 2023 02:09:59 +0200 Subject: [PATCH] Don't start a new OUT transfer when another one is still in progress --- src/main.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/main.c b/src/main.c index ee3671e..1ab8e63 100644 --- a/src/main.c +++ b/src/main.c @@ -139,26 +139,27 @@ int main(int argc, char* argv[]) { fxlink_device_start_bulk_IN(dev); } - int bytes_socket; - if (ioctl(client_socket, FIONREAD, &bytes_socket) < 0) { - perror("ioctl"); - ret = -1; - break; - } - if (bytes_socket > 0) { - char buf[1024]; - ssize_t recv_ret = recv(client_socket, buf, sizeof(buf), MSG_PEEK); - if (recv_ret < 0) { - perror("recv"); + // We don't want to start a new OUT transfer if another one is still in progress + if (!dev->comm->ftransfer_OUT) { + int bytes_socket; + if (ioctl(client_socket, FIONREAD, &bytes_socket) < 0) { + perror("ioctl"); ret = -1; break; } - // TODO : Figure out why we need this workaround when we go too fast - if (!fxlink_device_start_bulk_OUT(dev, "gdb", "remote", buf, recv_ret, false)) { - elog("unable to start bulk OUT trasfer\n"); - } else { - ssize_t recv_ret2 = recv(client_socket, buf, recv_ret, 0); - assert(recv_ret2 == recv_ret); + if (bytes_socket > 0) { + char buf[1024]; + ssize_t recv_ret = recv(client_socket, buf, sizeof(buf), 0); + if (recv_ret < 0) { + perror("recv"); + ret = -1; + break; + } + if (!fxlink_device_start_bulk_OUT(dev, "gdb", "remote", buf, recv_ret, false)) { + elog("unable to start bulk OUT trasfer\n"); + ret = -1; + break; + } } } }