aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2024-09-24 15:17:57 +0200
committerTom de Vries <tdevries@suse.de>2024-09-24 15:17:57 +0200
commit07d74e51ba8691826b3bc758c2f7d2c1283e4d9b (patch)
tree91f10edc92083c4e4b2775a09c033a2e36a869fd /gdb
parent63b87d7c85ac25fffa3c8a590a55aa5ccd42b5fc (diff)
downloadgdb-07d74e51ba8691826b3bc758c2f7d2c1283e4d9b.zip
gdb-07d74e51ba8691826b3bc758c2f7d2c1283e4d9b.tar.gz
gdb-07d74e51ba8691826b3bc758c2f7d2c1283e4d9b.tar.bz2
[gdb] Handle ^C in ~scoped_remote_fd
While reviewing "catch (...)" uses I came across: ... try { fileio_error remote_errno; m_remote->remote_hostio_close (m_fd, &remote_errno); } catch (...) { /* Swallow exception before it escapes the dtor. If something goes wrong, likely the connection is gone, and there's nothing else that can be done. */ } ... This also swallows gdb_exception_quit and gdb_exception_forced_quit. I don't know whether these can actually happen here, but if not it's better to accommodate for the possibility anyway. Fix this by handling gdb_exception_quit and gdb_exception_forced_quit explicitly. It could be that "catch (...)" should be replaced by "catch (const gdb_exception &)" but that depends on what kind of exception remote_hostio_close is expected to throw, and I don't know that, so I'm leaving it as is. Tested on aarch64-linux. Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/remote.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gdb/remote.c b/gdb/remote.c
index 3efb957..8e704a7 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -13242,6 +13242,18 @@ public:
fileio_error remote_errno;
m_remote->remote_hostio_close (m_fd, &remote_errno);
}
+ catch (const gdb_exception_quit &ex)
+ {
+ /* We can't throw from a destructor, so re-set the quit flag
+ for later QUIT checking. */
+ set_quit_flag ();
+ }
+ catch (const gdb_exception_forced_quit &ex)
+ {
+ /* Like above, but (eventually) cause GDB to terminate by
+ setting sync_quit_force_run. */
+ set_force_quit_flag ();
+ }
catch (...)
{
/* Swallow exception before it escapes the dtor. If