From 305436e07ac142e2cd8f9659bf8d6ad9630d5008 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 19 Jan 2012 16:32:59 +0000 Subject: [PATCH] 2012-01-19 Pedro Alves * 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 | 8 ++++++++ gdb/linux-nat.c | 4 ++-- gdb/target.c | 17 ++++++++--------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index dfce58b66d2..cd55e42994a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2012-01-19 Pedro Alves + + * 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 * mdebugread.c (sort_blocks): Replace integer constants with ones diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index f6b36a2d63c..30f90625c9e 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -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); diff --git a/gdb/target.c b/gdb/target.c index 9aaa0eac44e..6af4620ddf7 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -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; } -- 2.30.2