From 1ef8573cc77c91feeef3edab74d383d20809eb33 Mon Sep 17 00:00:00 2001 From: Andrew Burgess <andrew.burgess@embecosm.com> Date: Wed, 9 Jan 2019 14:02:39 +0000 Subject: gdb: Improve scoped_switch_fork_info class After committing this patch I got this feedback: https://sourceware.org/ml/gdb-patches/2019-01/msg00181.html This patch makes the constructor of scoped_switch_fork_info explicit, and wraps the core of the destructor in a TRY/CATCH block. I've run this through the testsuite on X86-64/GNU Linux, however, this code is not exercised, so this patch is untested. gdb/ChangeLog: * linux-fork.c (scoped_switch_fork_info) <scoped_switch_fork_info>: Make explicit. <~scoped_switch_fork_info>: Wrap core in TRY/CATCH. --- gdb/ChangeLog | 6 ++++++ gdb/linux-fork.c | 17 +++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) (limited to 'gdb') diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 32fe0bb..f449d68 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2019-01-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * linux-fork.c (scoped_switch_fork_info) + <scoped_switch_fork_info>: Make explicit. + <~scoped_switch_fork_info>: Wrap core in TRY/CATCH. + 2019-01-10 Tom Tromey <tom@tromey.com> * objfiles.h (objfile::reset_psymtabs): Update. diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c index f3231ba..9bbf9c4 100644 --- a/gdb/linux-fork.c +++ b/gdb/linux-fork.c @@ -446,7 +446,7 @@ class scoped_switch_fork_info public: /* Switch to the infrun state held on the fork_info identified by PPTID. If PPTID is the current inferior then no switch is done. */ - scoped_switch_fork_info (ptid_t pptid) + explicit scoped_switch_fork_info (ptid_t pptid) : m_oldfp (nullptr) { if (pptid != inferior_ptid) @@ -472,9 +472,18 @@ public: if (m_oldfp != nullptr) { /* Switch back to inferior_ptid. */ - remove_breakpoints (); - fork_load_infrun_state (m_oldfp); - insert_breakpoints (); + TRY + { + remove_breakpoints (); + fork_load_infrun_state (m_oldfp); + insert_breakpoints (); + } + CATCH (ex, RETURN_MASK_ALL) + { + warning (_("Couldn't restore checkpoint state in %s: %s"), + target_pid_to_str (fp->ptid), ex.message); + } + END_CATCH } } -- cgit v1.1