[1/2] gdb: make target_close check that target isn't pushed in all inferiors

Message ID 20210429193451.1866888-2-simon.marchi@polymtl.ca
State Superseded
Headers show
  • Remove two references to current inferior in
Related show

Commit Message

Weimin Pan via Gdb-patches April 29, 2021, 7:34 p.m.
The target_close function currently checks that the target to be closed
isn't pushed in the current inferior:

    gdb_assert (!current_inferior ()->target_is_pushed (targ));

When a target is closed, it's normally because its refcount has dropped
to 0, because it's not used in any inferior anymore.  I think it would
make sense to change that assert to not only check in the current
inferior, but to check in all inferiors.  It would be quite bad (and a
bug) to close a target while it's still pushed in one of the non-current


	* target.c (target_close): Check in all inferiors that the
	target is not pushed.

Change-Id: I6e37fc3f3476a0593da1e476604642b2de90f1d5
 gdb/target.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)



diff --git a/gdb/target.c b/gdb/target.c
index 1f0741471d82..00f0acde7586 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -3734,7 +3734,8 @@  debug_target::info () const
 target_close (struct target_ops *targ)
-  gdb_assert (!current_inferior ()->target_is_pushed (targ));
+  for (inferior *inf : all_inferiors ())
+    gdb_assert (!inf->target_is_pushed (targ));
   fileio_handles_invalidate_target (targ);