Fix removing inferiors from within "thread apply" commands
[deliverable/binutils-gdb.git] / gdb / inferior.c
index 327590adaac21b0a33fe0b21a8f0706376e66be3..e85859f6d3e9af5d3e1afbe8e485574fed9c9550 100644 (file)
@@ -50,7 +50,9 @@ static int highest_inferior_num;
    `set print inferior-events'.  */
 static int print_inferior_events = 0;
 
-/* The Current Inferior.  */
+/* The Current Inferior.  This is a strong reference.  I.e., whenever
+   an inferior is the current inferior, its refcount is
+   incremented.  */
 static struct inferior *current_inferior_ = NULL;
 
 struct inferior*
@@ -65,6 +67,8 @@ set_current_inferior (struct inferior *inf)
   /* There's always an inferior.  */
   gdb_assert (inf != NULL);
 
+  inf->incref ();
+  current_inferior_->decref ();
   current_inferior_ = inf;
 }
 
@@ -483,13 +487,12 @@ void
 prune_inferiors (void)
 {
   struct inferior *ss, **ss_link;
-  struct inferior *current = current_inferior ();
 
   ss = inferior_list;
   ss_link = &inferior_list;
   while (ss)
     {
-      if (ss == current
+      if (!ss->deletable ()
          || !ss->removable
          || ss->pid != 0)
        {
@@ -774,7 +777,7 @@ remove_inferior_command (char *args, int from_tty)
          continue;
        }
 
-      if (inf == current_inferior ())
+      if (!inf->deletable ())
        {
          warning (_("Can not remove current inferior %d."), num);
          continue;
@@ -1017,6 +1020,7 @@ initialize_inferiors (void)
      that.  Do this after initialize_progspace, due to the
      current_program_space reference.  */
   current_inferior_ = add_inferior (0);
+  current_inferior_->incref ();
   current_inferior_->pspace = current_program_space;
   current_inferior_->aspace = current_program_space->aspace;
   /* The architecture will be initialized shortly, by
This page took 0.02464 seconds and 4 git commands to generate.