summaryrefslogtreecommitdiff
path: root/gdb/inferior.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/inferior.c')
-rw-r--r--gdb/inferior.c63
1 files changed, 12 insertions, 51 deletions
diff --git a/gdb/inferior.c b/gdb/inferior.c
index 3accf9780a6..9681aaf2cdb 100644
--- a/gdb/inferior.c
+++ b/gdb/inferior.c
@@ -41,7 +41,7 @@
DEFINE_REGISTRY (inferior, REGISTRY_ACCESS_FIELD)
-struct inferior *inferior_list = NULL;
+intrusive_list<inferior> inferior_list;
static int highest_inferior_num;
/* See inferior.h. */
@@ -126,16 +126,7 @@ add_inferior_silent (int pid)
{
inferior *inf = new inferior (pid);
- if (inferior_list == NULL)
- inferior_list = inf;
- else
- {
- inferior *last;
-
- for (last = inferior_list; last->next != NULL; last = last->next)
- ;
- last->next = inf;
- }
+ inferior_list.push_back (*inf);
gdb::observers::inferior_added.notify (inf);
@@ -177,25 +168,12 @@ inferior::clear_thread_list (bool silent)
}
void
-delete_inferior (struct inferior *todel)
+delete_inferior (struct inferior *inf)
{
- struct inferior *inf, *infprev;
-
- infprev = NULL;
-
- for (inf = inferior_list; inf; infprev = inf, inf = inf->next)
- if (inf == todel)
- break;
-
- if (!inf)
- return;
-
inf->clear_thread_list (true);
- if (infprev)
- infprev->next = inf->next;
- else
- inferior_list = inf->next;
+ auto it = inferior_list.iterator_to (*inf);
+ inferior_list.erase (it);
gdb::observers::inferior_removed.notify (inf);
@@ -210,17 +188,8 @@ delete_inferior (struct inferior *todel)
exit of its threads. */
static void
-exit_inferior_1 (struct inferior *inftoex, int silent)
+exit_inferior_1 (struct inferior *inf, int silent)
{
- struct inferior *inf;
-
- for (inf = inferior_list; inf; inf = inf->next)
- if (inf == inftoex)
- break;
-
- if (!inf)
- return;
-
inf->clear_thread_list (silent);
gdb::observers::inferior_exit.notify (inf);
@@ -388,22 +357,14 @@ have_live_inferiors (void)
void
prune_inferiors (void)
{
- inferior *ss;
-
- ss = inferior_list;
- while (ss)
+ for (inferior *inf : all_inferiors_safe ())
{
- if (!ss->deletable ()
- || !ss->removable
- || ss->pid != 0)
- {
- ss = ss->next;
- continue;
- }
+ if (!inf->deletable ()
+ || !inf->removable
+ || inf->pid != 0)
+ continue;
- inferior *ss_next = ss->next;
- delete_inferior (ss);
- ss = ss_next;
+ delete_inferior (inf);
}
}