gdb_server: refactor and unify function gdb_get_char_inner 24/7724/3
authorMarek Vrbka <marek.vrbka@codasip.com>
Tue, 30 May 2023 08:07:18 +0000 (10:07 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 10 Jun 2023 17:10:07 +0000 (17:10 +0000)
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>
src/server/gdb_server.c

index 0baf7553b21c29105180bc25d8191578caf3545b..702dbef49922087b6d4fb18851ffb77697e3696d 100644 (file)
@@ -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_

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)