[review] Remove the "next" field from windows_thread_info
Commit Message
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/404
......................................................................
Remove the "next" field from windows_thread_info
This changes windows_thread_info to remove the "next" field, replacing
the linked list of threads with a vector. This is a prerequisite to
sharing is structure with gdbserver, which manages threads
differently.
gdb/ChangeLog
2019-10-29 Tom Tromey <tromey@adacore.com>
* windows-nat.c (struct windows_thread_info): Remove typedef.
(thread_head): Remove.
(thread_list): New global.
(thread_rec, windows_add_thread, windows_init_thread_list)
(windows_delete_thread, windows_continue): Update.
Change-Id: Ib93c54e529a5d82515883f44a478eeb0ff0dbae9
---
M gdb/ChangeLog
M gdb/windows-nat.c
2 files changed, 29 insertions(+), 31 deletions(-)
Comments
Luis Machado has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/404
......................................................................
Patch Set 1: Code-Review+1
Looks sane to me.
Simon Marchi has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/404
......................................................................
Patch Set 1: Code-Review+1
(1 comment)
https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/404/1//COMMIT_MSG
Commit Message:
https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/404/1//COMMIT_MSG@11
PS1, Line 11:
6 |
7 | Remove the "next" field from windows_thread_info
8 |
9 | This changes windows_thread_info to remove the "next" field, replacing
10 | the linked list of threads with a vector. This is a prerequisite to
11 > sharing is structure with gdbserver, which manages threads
12 | differently.
13 |
14 | gdb/ChangeLog
15 | 2019-10-29 Tom Tromey <tromey@adacore.com>
16 |
"this"?
Tom Tromey has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/404
......................................................................
Patch Set 1:
(1 comment)
| --- /dev/null
| +++ /COMMIT_MSG
| @@ -1,0 +2,19 @@ Parent: 12c3e917 (Automatic date update in version.in)
| +Author: Tom Tromey <tromey@adacore.com>
| +AuthorDate: 2019-10-07 13:45:15 -0600
| +Commit: Tom Tromey <tromey@adacore.com>
| +CommitDate: 2019-10-29 10:08:34 -0600
| +
| +Remove the "next" field from windows_thread_info
| +
| +This changes windows_thread_info to remove the "next" field, replacing
| +the linked list of threads with a vector. This is a prerequisite to
| +sharing is structure with gdbserver, which manages threads
PS1, Line 11:
> "this"?
Yep, thanks. I've fixed this. I'm going to push this
and the other patches from this series that have been
reviewed.
| +differently.
| +
| +gdb/ChangeLog
| +2019-10-29 Tom Tromey <tromey@adacore.com>
| +
| + * windows-nat.c (struct windows_thread_info): Remove typedef.
| + (thread_head): Remove.
| + (thread_list): New global.
| + (thread_rec, windows_add_thread, windows_init_thread_list)
Tom Tromey has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/404
......................................................................
Patch Set 1:
(1 comment)
| --- /dev/null
| +++ /COMMIT_MSG
| @@ -1,0 +2,19 @@ Parent: 12c3e917 (Automatic date update in version.in)
| +Author: Tom Tromey <tromey@adacore.com>
| +AuthorDate: 2019-10-07 13:45:15 -0600
| +Commit: Tom Tromey <tromey@adacore.com>
| +CommitDate: 2019-10-29 10:08:34 -0600
| +
| +Remove the "next" field from windows_thread_info
| +
| +This changes windows_thread_info to remove the "next" field, replacing
| +the linked list of threads with a vector. This is a prerequisite to
| +sharing is structure with gdbserver, which manages threads
PS1, Line 11:
> > "this"?
>
> Yep, thanks. I've fixed this. I'm going to push this
> and the other patches from this series that have been
> reviewed.
Well ... I will after we agree about the symbol assert patch,
so I don't check in patches that can't be built.
| +differently.
| +
| +gdb/ChangeLog
| +2019-10-29 Tom Tromey <tromey@adacore.com>
| +
| + * windows-nat.c (struct windows_thread_info): Remove typedef.
| + (thread_head): Remove.
| + (thread_list): New global.
| + (thread_rec, windows_add_thread, windows_init_thread_list)
Pedro Alves has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/404
......................................................................
Patch Set 2: Code-Review+2
@@ -1,3 +1,11 @@
+2019-10-29 Tom Tromey <tromey@adacore.com>
+
+ * windows-nat.c (struct windows_thread_info): Remove typedef.
+ (thread_head): Remove.
+ (thread_list): New global.
+ (thread_rec, windows_add_thread, windows_init_thread_list)
+ (windows_delete_thread, windows_continue): Update.
+
2019-10-26 Tom de Vries <tdevries@suse.de>
* aarch64-linux-tdep.c: Fix typos in comments.
@@ -43,6 +43,7 @@
#include <cygwin/version.h>
#endif
#include <algorithm>
+#include <vector>
#include "filenames.h"
#include "symfile.h"
@@ -214,9 +215,8 @@
/* Thread information structure used to track information that is
not available in gdb's thread structure. */
-typedef struct windows_thread_info_struct
+struct windows_thread_info
{
- struct windows_thread_info_struct *next;
DWORD id;
HANDLE h;
CORE_ADDR thread_local_base;
@@ -224,10 +224,9 @@
int suspended;
int reload_context;
CONTEXT context;
- }
-windows_thread_info;
+ };
-static windows_thread_info thread_head;
+static std::vector<windows_thread_info *> thread_list;
/* The process and thread handles for the above context. */
@@ -384,9 +383,7 @@
static windows_thread_info *
thread_rec (DWORD id, int get_context)
{
- windows_thread_info *th;
-
- for (th = &thread_head; (th = th->next) != NULL;)
+ for (windows_thread_info *th : thread_list)
if (th->id == id)
{
if (!th->suspended && get_context)
@@ -448,8 +445,7 @@
th->id = id;
th->h = h;
th->thread_local_base = (CORE_ADDR) (uintptr_t) tlb;
- th->next = thread_head.next;
- thread_head.next = th;
+ thread_list.push_back (th);
/* Add this new thread to the list of threads.
@@ -484,17 +480,13 @@
static void
windows_init_thread_list (void)
{
- windows_thread_info *th = &thread_head;
-
DEBUG_EVENTS (("gdb: windows_init_thread_list\n"));
init_thread_list ();
- while (th->next != NULL)
- {
- windows_thread_info *here = th->next;
- th->next = here->next;
- xfree (here);
- }
- thread_head.next = NULL;
+
+ for (windows_thread_info *here : thread_list)
+ xfree (here);
+
+ thread_list.clear ();
}
/* Delete a thread from the list of threads.
@@ -507,7 +499,6 @@
static void
windows_delete_thread (ptid_t ptid, DWORD exit_code, bool main_thread_p)
{
- windows_thread_info *th;
DWORD id;
gdb_assert (ptid.tid () != 0);
@@ -530,17 +521,17 @@
delete_thread (find_thread_ptid (ptid));
- for (th = &thread_head;
- th->next != NULL && th->next->id != id;
- th = th->next)
- continue;
+ auto iter = std::find_if (thread_list.begin (), thread_list.end (),
+ [=] (windows_thread_info *th)
+ {
+ return th->id == id;
+ });
- if (th->next != NULL)
+ if (iter != thread_list.end ())
{
- windows_thread_info *here = th->next;
- th->next = here->next;
- xfree (here->name);
- xfree (here);
+ xfree ((*iter)->name);
+ xfree (*iter);
+ thread_list.erase (iter);
}
}
@@ -1319,7 +1310,6 @@
static BOOL
windows_continue (DWORD continue_status, int id, int killed)
{
- windows_thread_info *th;
BOOL res;
DEBUG_EVENTS (("ContinueDebugEvent (cpid=%d, ctid=0x%x, %s);\n",
@@ -1328,7 +1318,7 @@
continue_status == DBG_CONTINUE ?
"DBG_CONTINUE" : "DBG_EXCEPTION_NOT_HANDLED"));
- for (th = &thread_head; (th = th->next) != NULL;)
+ for (windows_thread_info *th : thread_list)
if ((id == -1 || id == (int) th->id)
&& th->suspended)
{