[binutils-gdb] Windows gdb+gdbserver: Eliminate DONT_SUSPEND

Pedro Alves via Gdb-cvs <[email protected]>
Newsgroups gmane.comp.gdb.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=acb38579e381e70f0836ecc99206542a3fa7f9c7

commit acb38579e381e70f0836ecc99206542a3fa7f9c7
Author: Pedro Alves <[email protected]>
Date:   Tue May 9 10:13:08 2023 +0100

    Windows gdb+gdbserver: Eliminate DONT_SUSPEND
    
    There's a single call to thread_rec(DONT_SUSPEND), in
    windows_process_info::handle_exception.
    
    In GDB, the windows-nat.c thread_rec implementation avoids actually
    calling SuspendThread on the event thread by doing:
    
                   th->suspended = -1;
    
    I am not exactly sure why, but it kind of looks like it is done as an
    optimization, avoiding a SuspendThread call?  It is probably done for
    the same reason as the code touched in the previous patch avoided
    suspending the event thread.
    
    This however gets in the way of non-stop mode, which will really want
    to SuspendThread the event thread for DBG_REPLY_LATER.
    
    In gdbserver's thread_rec implementation DONT_SUSPEND is ignored, and
    thread_rec actually always suspends, which really suggests that
    SuspendThread on the event thread is really not a problem.  I really
    can't imagine why it would be.
    
    DONT_SUSPEND invalidates the thread's context, but there is no need to
    invalidate the context when we get an event for a thread, because we
    invalidate it when we previously resumed the thread.
    
    So, we can just remove the thread_rec call from
    windows_process_info::handle_exception.  That's what this patch does.
    
    Approved-By: Tom Tromey <[email protected]>
    Change-Id: I0f328542bda6d8268814ca1ee4ae7a478098ecf2

Diff:
---
 gdb/nat/windows-nat.c |  4 ----
 gdb/nat/windows-nat.h |  2 --
 gdb/windows-nat.c     | 11 -----------
 3 files changed, 17 deletions(-)

diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c
index cefd335f652..16d4acae569 100644
--- a/gdb/nat/windows-nat.c
+++ b/gdb/nat/windows-nat.c
@@ -356,10 +356,6 @@ windows_process_info::handle_exception (struct target_waitstatus *ourstatus,
 
   memcpy (&siginfo_er, rec, sizeof siginfo_er);
 
-  /* Record the context of the current thread.  */
-  thread_rec (ptid_t (current_event.dwProcessId, current_event.dwThreadId, 0),
-	      DONT_SUSPEND);
-
   last_sig = GDB_SIGNAL_0;
 
   switch (code)
diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h
index 1a564fbf11b..2cc665fb53c 100644
--- a/gdb/nat/windows-nat.h
+++ b/gdb/nat/windows-nat.h
@@ -107,8 +107,6 @@ struct windows_thread_info
 /* Possible values to pass to 'thread_rec'.  */
 enum thread_disposition_type
 {
-  /* Invalidate the context, but do not suspend the thread.  */
-  DONT_SUSPEND,
 };
 
 /* A single pending stop.  See "pending_stops" for more
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index ca9a197d64e..aae4de42a73 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -279,17 +279,6 @@ windows_per_inferior::thread_rec (ptid_t ptid,
 				  thread_disposition_type disposition)
 {
   windows_thread_info *th = find_thread (ptid);
-
-  if (th != nullptr && !th->suspended)
-    {
-      switch (disposition)
-	{
-	case DONT_SUSPEND:
-	  th->suspended = -1;
-	  invalidate_thread_context (th);
-	  break;
-	}
-    }
   return th;
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.