diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-06-16 08:24:51 +0200 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-06-16 08:57:49 +0200 |
commit | 5104d56e5c37defaf2f6c5c8607bac45b8b49b32 (patch) | |
tree | c6b62d7421b3fe82377702c8bf552590e2f2ca0d /src/server | |
parent | cd9c61cc068635fa707981decfea600ee7e94201 (diff) | |
download | openocd_libswd-5104d56e5c37defaf2f6c5c8607bac45b8b49b32.tar.gz openocd_libswd-5104d56e5c37defaf2f6c5c8607bac45b8b49b32.tar.bz2 openocd_libswd-5104d56e5c37defaf2f6c5c8607bac45b8b49b32.tar.xz openocd_libswd-5104d56e5c37defaf2f6c5c8607bac45b8b49b32.zip |
gdb: clean up error handling in step/continue
if step/continue fails, then the error should be
reported to the calling fn.
The calling fn decides if the connection has to be
aborted or if packet processing can continue.
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/gdb_server.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c index 029bdf81..8ed9e74f 100644 --- a/src/server/gdb_server.c +++ b/src/server/gdb_server.c @@ -2151,7 +2151,17 @@ static int gdb_input_inner(struct connection *connection) struct gdb_connection *gdb_con = connection->priv; static int extended_protocol = 0; - /* drain input buffer */ + /* drain input buffer. If one of the packets fail, then an error + * packet is replied, if applicable. + * + * This loop will terminate and the error code is returned. + * + * The calling fn will check if this error is something that + * can be recovered from, or if the connection must be closed. + * + * If the error is recoverable, this fn is called again to + * drain the rest of the buffer. + */ do { packet_size = GDB_BUFFER_SIZE-1; @@ -2235,8 +2245,6 @@ static int gdb_input_inner(struct connection *connection) case 'c': case 's': { - int retval = ERROR_OK; - struct gdb_connection *gdb_con = connection->priv; log_add_callback(gdb_log_callback, connection); @@ -2271,7 +2279,7 @@ static int gdb_input_inner(struct connection *connection) } gdb_con->sync = false; - if ((retval!=ERROR_OK) || (!already_running && nostep)) + if (!already_running && nostep) { /* Either the target isn't in the halted state, then we can't * step/continue. This might be early setup, etc. @@ -2294,7 +2302,9 @@ static int gdb_input_inner(struct connection *connection) if (!already_running) { - int retval = gdb_step_continue_packet(connection, target, packet, packet_size); + /* Here we don't want packet processing to stop even if this fails, + * so we use a local variable instead of retval. */ + retval = gdb_step_continue_packet(connection, target, packet, packet_size); if (retval != ERROR_OK) { /* we'll never receive a halted condition... issue a false one.. */ |