From dea57a626364698759d1525acf9109771d173811 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 6 Feb 2019 02:54:17 -0700 Subject: [PATCH] Add push_target overload This adds a push_target overload that takes a "target_ops_up &&". This removes some calls to release a target_ops_up, and makes the intent here clearer. gdb/ChangeLog 2019-02-15 Tom Tromey * target.h (push_target): Declare new overload. * target.c (push_target): New overload, taking an rvalue reference. * remote.c (remote_target::open_1): Use push_target overload. * corelow.c (core_target_open): Use push_target overload. --- gdb/ChangeLog | 7 +++++++ gdb/corelow.c | 3 +-- gdb/remote.c | 4 +--- gdb/target.c | 9 +++++++++ gdb/target.h | 3 +++ 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2e72ab66512..fea01a87aa3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2019-02-15 Tom Tromey + + * target.h (push_target): Declare new overload. + * target.c (push_target): New overload, taking an rvalue reference. + * remote.c (remote_target::open_1): Use push_target overload. + * corelow.c (core_target_open): Use push_target overload. + 2019-02-15 Tom Tromey * ravenscar-thread.c (is_ravenscar_task) diff --git a/gdb/corelow.c b/gdb/corelow.c index 52d6d95b3c0..6a29d6a2328 100644 --- a/gdb/corelow.c +++ b/gdb/corelow.c @@ -417,8 +417,7 @@ core_target_open (const char *arg, int from_tty) if (!exec_bfd) set_gdbarch_from_file (core_bfd); - push_target (target); - target_holder.release (); + push_target (std::move (target_holder)); inferior_ptid = null_ptid; diff --git a/gdb/remote.c b/gdb/remote.c index 85af01e4b73..36136e3e3ee 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -5547,9 +5547,7 @@ remote_target::open_1 (const char *name, int from_tty, int extended_p) } /* Switch to using the remote target now. */ - push_target (remote); - /* The target stack owns the target now. */ - target_holder.release (); + push_target (std::move (target_holder)); /* Register extra event sources in the event loop. */ rs->remote_async_inferior_event_token diff --git a/gdb/target.c b/gdb/target.c index c1ab07f7608..116510e8cb8 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -585,6 +585,15 @@ push_target (struct target_ops *t) g_target_stack.push (t); } +/* See target.h */ + +void +push_target (target_ops_up &&t) +{ + g_target_stack.push (t.get ()); + t.release (); +} + /* See target.h. */ int diff --git a/gdb/target.h b/gdb/target.h index 96413aa6c3a..c95151a4044 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -2333,6 +2333,9 @@ extern void add_deprecated_target_alias (const target_info &info, extern void push_target (struct target_ops *); +/* An overload that deletes the target on failure. */ +extern void push_target (target_ops_up &&); + extern int unpush_target (struct target_ops *); extern void target_pre_inferior (int); -- 2.30.2