aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarek Vrbka <marek.vrbka@codasip.com>2023-05-30 10:07:18 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2023-06-10 17:10:07 +0000
commit71180e67537117f841ff5dd7c359e3678d861e2b (patch)
tree496c9d957de5ab7078d24e16beca5aec582e492e /src
parent0854c83076749196603bebdb47ec93f50a454f79 (diff)
downloadriscv-openocd-71180e67537117f841ff5dd7c359e3678d861e2b.zip
riscv-openocd-71180e67537117f841ff5dd7c359e3678d861e2b.tar.gz
riscv-openocd-71180e67537117f841ff5dd7c359e3678d861e2b.tar.bz2
gdb_server: refactor and unify function gdb_get_char_inner
The old implementation of gdb socket error handling in the gdb_get_char_inner() differs between Windows and *nix platforms. This patch simplifies it by using an existing function log_socket_error() which handles most of the platform specific things. It also provides better error messages. Change-Id: Iec871c4965b116dc7cfb03c3565bab66c8b41958 Signed-off-by: Marek Vrbka <marek.vrbka@codasip.com> Reviewed-on: https://review.openocd.org/c/openocd/+/7724 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/server/gdb_server.c43
1 files changed, 12 insertions, 31 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index 0baf755..702dbef 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -235,39 +235,20 @@ static int gdb_get_char_inner(struct connection *connection, int *next_char)
}
#ifdef _WIN32
- errno = WSAGetLastError();
-
- switch (errno) {
- case WSAEWOULDBLOCK:
- usleep(1000);
- break;
- case WSAECONNABORTED:
- gdb_con->closed = true;
- return ERROR_SERVER_REMOTE_CLOSED;
- case WSAECONNRESET:
- gdb_con->closed = true;
- return ERROR_SERVER_REMOTE_CLOSED;
- default:
- LOG_ERROR("read: %d", errno);
- exit(-1);
- }
+ bool retry = (WSAGetLastError() == WSAEWOULDBLOCK);
#else
- switch (errno) {
- case EAGAIN:
- usleep(1000);
- break;
- case ECONNABORTED:
- gdb_con->closed = true;
- return ERROR_SERVER_REMOTE_CLOSED;
- case ECONNRESET:
- gdb_con->closed = true;
- return ERROR_SERVER_REMOTE_CLOSED;
- default:
- LOG_ERROR("read: %s", strerror(errno));
- gdb_con->closed = true;
- return ERROR_SERVER_REMOTE_CLOSED;
- }
+ bool retry = (errno == EAGAIN);
#endif
+
+ if (retry) {
+ // Try again after a delay
+ usleep(1000);
+ } else {
+ // Print error and close the socket
+ log_socket_error("GDB");
+ gdb_con->closed = true;
+ return ERROR_SERVER_REMOTE_CLOSED;
+ }
}
#ifdef _DEBUG_GDB_IO_