From 07d74e51ba8691826b3bc758c2f7d2c1283e4d9b Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Tue, 24 Sep 2024 15:17:57 +0200 Subject: [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 --- gdb/remote.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'gdb/remote.c') 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 -- cgit v1.1