[pushed] GC gdb/thread.c:current_thread_cleanup_chain (Re: [PATCH 2/2] Don't delete thread_info if refcount isn't zero)
Commit Message
On 04/10/2017 02:40 PM, Yao Qi wrote:
> Pedro Alves <palves@redhat.com> writes:
>
>> I'm not sure what you mean by "wrong". I'm saying that the old comment
>> still makes sense. That comment is talking about the
>> "find_inferior_ptid (old->thread->ptid) != NULL" line, which is a
>> lookup for an _inferior_ not a thread. Both the inferior and thread_info
>
> I thought it is about a thread.
>
>> object are still around, but the process may have exited/been detached
>> meanwhile, and consequently the inferior's "pid" field is now
>> zero. And in that case, we don't restore back the selected thread.
>
> I move the comment close to "find_inferior_ptid (old->thread->ptid) != NULL"
> line, to make it clearer. Patch below is pushed in.
Thanks!
I noticed that ...
> -/* A thread_ptid_changed observer. Update all currently installed
> - current_thread_cleanup cleanups that want to switch back to
> - OLD_PTID to switch back to NEW_PTID instead. */
> -
> -static void
> -restore_current_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid)
> -{
> - struct current_thread_cleanup *it;
> -
> - for (it = current_thread_cleanup_chain; it != NULL; it = it->next)
> - {
> - if (ptid_equal (it->inferior_ptid, old_ptid))
> - it->inferior_ptid = new_ptid;
> - }
> -}
... this means current_thread_cleanup_chain is no longer useful.
So I pushed in the patch below.
From 996812e3d43f78b17b6454d2948cd825ec98c63b Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Mon, 10 Apr 2017 15:18:49 +0100
Subject: [PATCH] GC gdb/thread.c:current_thread_cleanup_chain
Commit 803bdfe43083475c7df3db38dc96f4e20d05457d ("Don't delete
thread_info if refcount isn't zero") eliminated
restore_current_thread_ptid_changed, so current_thread_cleanup_chain
is no longer necessary either.
gdb/ChangeLog:
2017-04-10 Pedro Alves <palves@redhat.com>
* thread.c (struct current_thread_cleanup) <next>: Delete field.
(current_thread_cleanup_chain): Delete.
(restore_current_thread_cleanup_dtor)
(make_cleanup_restore_current_thread): Remove references to
current_thread_cleanup_chain.
---
gdb/ChangeLog | 8 ++++++++
gdb/thread.c | 17 -----------------
2 files changed, 8 insertions(+), 17 deletions(-)
@@ -1,3 +1,11 @@
+2017-04-10 Pedro Alves <palves@redhat.com>
+
+ * thread.c (struct current_thread_cleanup) <next>: Delete field.
+ (current_thread_cleanup_chain): Delete.
+ (restore_current_thread_cleanup_dtor)
+ (make_cleanup_restore_current_thread): Remove references to
+ current_thread_cleanup_chain.
+
2017-04-10 Alan Hayward <alan.hayward@arm.com>
* msp430-tdep.c (msp430_pseudo_register_read): Never return
@@ -1549,11 +1549,6 @@ restore_selected_frame (struct frame_id a_frame_id, int frame_level)
struct current_thread_cleanup
{
- /* Next in list of currently installed 'struct
- current_thread_cleanup' cleanups. See
- 'current_thread_cleanup_chain' below. */
- struct current_thread_cleanup *next;
-
thread_info *thread;
struct frame_id selected_frame_id;
int selected_frame_level;
@@ -1562,13 +1557,6 @@ struct current_thread_cleanup
int was_removable;
};
-/* A chain of currently installed 'struct current_thread_cleanup'
- cleanups. Restoring the previously selected thread looks up the
- old thread in the thread list by ptid. If the thread changes ptid,
- we need to update the cleanup's thread structure so the look up
- succeeds. */
-static struct current_thread_cleanup *current_thread_cleanup_chain;
-
static void
do_restore_current_thread_cleanup (void *arg)
{
@@ -1609,8 +1597,6 @@ restore_current_thread_cleanup_dtor (void *arg)
struct thread_info *tp;
struct inferior *inf;
- current_thread_cleanup_chain = current_thread_cleanup_chain->next;
-
if (old->thread != NULL)
old->thread->decref ();
@@ -1642,9 +1628,6 @@ make_cleanup_restore_current_thread (void)
old->inf_id = current_inferior ()->num;
old->was_removable = current_inferior ()->removable;
- old->next = current_thread_cleanup_chain;
- current_thread_cleanup_chain = old;
-
if (!ptid_equal (inferior_ptid, null_ptid))
{
struct frame_info *frame;