2012-01-19 Pedro Alves <palves@redhat.com>
authorPedro Alves <palves@redhat.com>
Thu, 19 Jan 2012 16:32:59 +0000 (16:32 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 19 Jan 2012 16:32:59 +0000 (16:32 +0000)
* linux-nat.c (linux_nat_close): Call linux_nat_is_async_p and
linux_nat_async directly instead of going through the target
vector.
* target.c (unpush_target): Close target after unpushing it, not
before.

gdb/ChangeLog
gdb/linux-nat.c
gdb/target.c

index dfce58b66d2447242d53378ef3eecdd37eeb9cee..cd55e42994a9155fc780fa8e2ab8aa083df783b0 100644 (file)
@@ -1,3 +1,11 @@
+2012-01-19  Pedro Alves  <palves@redhat.com>
+
+       * linux-nat.c (linux_nat_close): Call linux_nat_is_async_p and
+       linux_nat_async directly instead of going through the target
+       vector.
+       * target.c (unpush_target): Close target after unpushing it, not
+       before.
+
 2012-01-19  Gary Benson  <gbenson@redhat.com>
 
        * mdebugread.c (sort_blocks): Replace integer constants with ones
index f6b36a2d63ccfa8033e501990537f6411db68116..30f90625c9ee248947b9ec314c32d9affaaa8880 100644 (file)
@@ -5717,8 +5717,8 @@ static void
 linux_nat_close (int quitting)
 {
   /* Unregister from the event loop.  */
-  if (target_is_async_p ())
-    target_async (NULL, 0);
+  if (linux_nat_is_async_p ())
+    linux_nat_async (NULL, 0);
 
   if (linux_ops->to_close)
     linux_ops->to_close (quitting);
index 9aaa0eac44e084ee1cb9c31116aa48285ea8377b..6af4620ddf709c5c45f279fe961b2460d30f11e7 100644 (file)
@@ -1010,16 +1010,10 @@ unpush_target (struct target_ops *t)
        break;
     }
 
+  /* If we don't find target_ops, quit.  Only open targets should be
+     closed.  */
   if ((*cur) == NULL)
-    return 0;                  /* Didn't find target_ops, quit now.  */
-
-  /* NOTE: cagney/2003-12-06: In '94 the close call was made
-     unconditional by moving it to before the above check that the
-     target was in the target stack (something about "Change the way
-     pushing and popping of targets work to support target overlays
-     and inheritance").  This doesn't make much sense - only open
-     targets should be closed.  */
-  target_close (t, 0);
+    return 0;                  
 
   /* Unchain the target.  */
   tmp = (*cur);
@@ -1028,6 +1022,11 @@ unpush_target (struct target_ops *t)
 
   update_current_target ();
 
+  /* Finally close the target.  Note we do this after unchaining, so
+     any target method calls from within the target_close
+     implementation don't end up in T anymore.  */
+  target_close (t, 0);
+
   return 1;
 }