aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-06-14 16:54:04 -0700
committerTom Tromey <tom@tromey.com>2018-09-17 00:42:19 -0600
commit2d844eaf9c60832756cff80af67e16969c0e11fc (patch)
tree62c7b589e0087f434e28542af33b387a1dac2ae3 /gdb
parentc7c4d3fa80d2fef74fd4bd6b1e22c0399b19455f (diff)
downloadgdb-2d844eaf9c60832756cff80af67e16969c0e11fc.zip
gdb-2d844eaf9c60832756cff80af67e16969c0e11fc.tar.gz
gdb-2d844eaf9c60832756cff80af67e16969c0e11fc.tar.bz2
Remove release_stop_context_cleanup
This removes release_stop_context_cleanup, replacing it with a stop_context destructor. It also mildly c++-ifies this struct. gdb/ChangeLog 2018-09-17 Tom Tromey <tom@tromey.com> * infrun.c (struct stop_context): Declare constructor, destructor, "changed" method. (stop_context::stop_context): Rename from save_stop_context. (stop_context::~stop_context): Rename from release_stop_context_cleanup. (normal_stop): Update. (stop_context::changed): Rename from stop_context_changed. Return bool.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog11
-rw-r--r--gdb/infrun.c74
2 files changed, 44 insertions, 41 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3c5ebb5..cfb3e7b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,16 @@
2018-09-17 Tom Tromey <tom@tromey.com>
+ * infrun.c (struct stop_context): Declare constructor,
+ destructor, "changed" method.
+ (stop_context::stop_context): Rename from save_stop_context.
+ (stop_context::~stop_context): Rename from
+ release_stop_context_cleanup.
+ (normal_stop): Update.
+ (stop_context::changed): Rename from stop_context_changed. Return
+ bool.
+
+2018-09-17 Tom Tromey <tom@tromey.com>
+
* inferior.h (struct infcall_suspend_state_deleter): New.
(infcall_suspend_state_up): New typedef.
(struct infcall_control_state_deleter): New.
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 4828720..3c3bb96 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -8095,6 +8095,13 @@ maybe_remove_breakpoints (void)
struct stop_context
{
+ stop_context ();
+ ~stop_context ();
+
+ DISABLE_COPY_AND_ASSIGN (stop_context);
+
+ bool changed () const;
+
/* The stop ID. */
ULONGEST stop_id;
@@ -8110,59 +8117,50 @@ struct stop_context
int inf_num;
};
-/* Returns a new stop context. If stopped for a thread event, this
+/* Initializes a new stop context. If stopped for a thread event, this
takes a strong reference to the thread. */
-static struct stop_context *
-save_stop_context (void)
+stop_context::stop_context ()
{
- struct stop_context *sc = XNEW (struct stop_context);
-
- sc->stop_id = get_stop_id ();
- sc->ptid = inferior_ptid;
- sc->inf_num = current_inferior ()->num;
+ stop_id = get_stop_id ();
+ ptid = inferior_ptid;
+ inf_num = current_inferior ()->num;
if (inferior_ptid != null_ptid)
{
/* Take a strong reference so that the thread can't be deleted
yet. */
- sc->thread = inferior_thread ();
- sc->thread->incref ();
+ thread = inferior_thread ();
+ thread->incref ();
}
else
- sc->thread = NULL;
-
- return sc;
+ thread = NULL;
}
/* Release a stop context previously created with save_stop_context.
Releases the strong reference to the thread as well. */
-static void
-release_stop_context_cleanup (void *arg)
+stop_context::~stop_context ()
{
- struct stop_context *sc = (struct stop_context *) arg;
-
- if (sc->thread != NULL)
- sc->thread->decref ();
- xfree (sc);
+ if (thread != NULL)
+ thread->decref ();
}
/* Return true if the current context no longer matches the saved stop
context. */
-static int
-stop_context_changed (struct stop_context *prev)
-{
- if (prev->ptid != inferior_ptid)
- return 1;
- if (prev->inf_num != current_inferior ()->num)
- return 1;
- if (prev->thread != NULL && prev->thread->state != THREAD_STOPPED)
- return 1;
- if (get_stop_id () != prev->stop_id)
- return 1;
- return 0;
+bool
+stop_context::changed () const
+{
+ if (ptid != inferior_ptid)
+ return true;
+ if (inf_num != current_inferior ()->num)
+ return true;
+ if (thread != NULL && thread->state != THREAD_STOPPED)
+ return true;
+ if (get_stop_id () != stop_id)
+ return true;
+ return false;
}
/* See infrun.h. */
@@ -8305,9 +8303,7 @@ normal_stop (void)
of stop_command's pre-hook not existing). */
if (stop_command != NULL)
{
- struct stop_context *saved_context = save_stop_context ();
- struct cleanup *old_chain
- = make_cleanup (release_stop_context_cleanup, saved_context);
+ stop_context saved_context;
TRY
{
@@ -8325,12 +8321,8 @@ normal_stop (void)
gone. Likewise if the command switches thread or inferior --
the observers would print a stop for the wrong
thread/inferior. */
- if (stop_context_changed (saved_context))
- {
- do_cleanups (old_chain);
- return 1;
- }
- do_cleanups (old_chain);
+ if (saved_context.changed ())
+ return 1;
}
/* Notify observers about the stop. This is where the interpreters