Add push_target overload
authorTom Tromey <tromey@adacore.com>
Wed, 6 Feb 2019 09:54:17 +0000 (02:54 -0700)
committerTom Tromey <tromey@adacore.com>
Fri, 15 Feb 2019 20:53:43 +0000 (13:53 -0700)
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  <tromey@adacore.com>

* 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
gdb/corelow.c
gdb/remote.c
gdb/target.c
gdb/target.h

index 2e72ab66512c4fc66a26bdb86aceaaeed9d7c2fc..fea01a87aa393a540bdddeb8d797c64cbb00164b 100644 (file)
@@ -1,3 +1,10 @@
+2019-02-15  Tom Tromey  <tromey@adacore.com>
+
+       * 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  <tromey@adacore.com>
 
        * ravenscar-thread.c (is_ravenscar_task)
index 52d6d95b3c07e2dbbfa39e880dddd1d948f301f0..6a29d6a232864add7b835dcd10cc0c73efec07fa 100644 (file)
@@ -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;
 
index 85af01e4b7321de679db6ca63a8fb7e308bdd87c..36136e3e3ee617159f6331e76796ef7a79ff130d 100644 (file)
@@ -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
index c1ab07f76086ef71b6f55d403fd5d3eee5fe5eab..116510e8cb8bf491a5bbb904f5144a5e5c3e7b87 100644 (file)
@@ -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
index 96413aa6c3a5039d20dbe7ffc93db7ec0e2a5788..c95151a4044f81f4b1596505b966c6110e757a1e 100644 (file)
@@ -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);