This is an automated email from Gerrit.

"Marek Vrbka <marek.vr...@codasip.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/7724

-- gerrit

commit 5e5b909a7a96b930ed9ed611e17f03507aa30635
Author: Marek Vrbka <marek.vr...@codasip.com>
Date:   Tue May 30 10:07:18 2023 +0200

    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.vr...@codasip.com>

diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index 943fe40088..fa6234a930 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -231,39 +231,19 @@ 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);
-               }
+               if (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;
-               }
+               if (errno == EAGAIN)
 #endif
+               {
+                       // 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_

-- 

Reply via email to