diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2019-01-09 14:02:39 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2019-01-10 16:15:30 +0000 |
commit | 1ef8573cc77c91feeef3edab74d383d20809eb33 (patch) | |
tree | f2f67317d9c4cf33fe9130f622f2759ac1511e68 /gdb | |
parent | 59aa9b0be159002e2eb971176921dc1e9c8045cf (diff) | |
download | gdb-1ef8573cc77c91feeef3edab74d383d20809eb33.zip gdb-1ef8573cc77c91feeef3edab74d383d20809eb33.tar.gz gdb-1ef8573cc77c91feeef3edab74d383d20809eb33.tar.bz2 |
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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/linux-fork.c | 17 |
2 files changed, 19 insertions, 4 deletions
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 } } |