Don't start a new OUT transfer when another one is still in progress

This commit is contained in:
redoste 2023-05-29 02:09:59 +02:00
parent d4d3b901bd
commit 8c41aba127
Signed by: redoste
SSH Key Fingerprint: SHA256:Y1z/cbVN8OVoFPXzVgklSqoZnyQQ/PQM8YwhMtxMk90
1 changed files with 18 additions and 17 deletions

View File

@ -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;
}
}
}
}