From: Andrew Burgess Date: Wed, 9 Jan 2019 14:02:39 +0000 (+0000) Subject: gdb: Improve scoped_switch_fork_info class X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1ef8573cc77c91feeef3edab74d383d20809eb33;p=binutils-gdb.git 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) : Make explicit. <~scoped_switch_fork_info>: Wrap core in TRY/CATCH. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 32fe0bbe814..f449d6836ed 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2019-01-10 Andrew Burgess + + * linux-fork.c (scoped_switch_fork_info) + : Make explicit. + <~scoped_switch_fork_info>: Wrap core in TRY/CATCH. + 2019-01-10 Tom Tromey * objfiles.h (objfile::reset_psymtabs): Update. diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c index f3231bae048..9bbf9c4a141 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 } }