diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2010-09-30 10:24:39 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2010-09-30 10:24:39 +0000 |
commit | 5cadd780e2909d24cb41b9a1b48b16385c834639 (patch) | |
tree | e0b7e3523e5ed04c09a06e126820cb3d90c664fd /gdb/inferior.c | |
parent | 1010a27d3706b299aa9958e82667d57f01f58204 (diff) | |
download | gdb-5cadd780e2909d24cb41b9a1b48b16385c834639.tar.gz |
gdb/
PR corefiles/12071.
* inferior.c (have_live_inferiors): New variables old_chain, inf and
tp. Iterate INFERIOR_LIST and call target_has_execution.
gdb/testsuite/
PR corefiles/12071.
* gdb.base/corefile.exp (quit with a process, no question: load core)
(quit with a core file): New tests.
Diffstat (limited to 'gdb/inferior.c')
-rw-r--r-- | gdb/inferior.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/gdb/inferior.c b/gdb/inferior.c index 28c586792b8..0f94f189f30 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -461,16 +461,29 @@ have_inferiors (void) int have_live_inferiors (void) { - struct target_ops *t; + struct cleanup *old_chain; + struct inferior *inf; - /* The check on stratum suffices, as GDB doesn't currently support - multiple target interfaces. */ - if (have_inferiors ()) - for (t = current_target.beneath; t != NULL; t = t->beneath) - if (t->to_stratum == process_stratum) - return 1; + old_chain = make_cleanup_restore_current_thread (); - return 0; + for (inf = inferior_list; inf; inf = inf->next) + if (inf->pid != 0) + { + struct thread_info *tp; + + tp = any_thread_of_process (inf->pid); + if (tp) + { + switch_to_thread (tp->ptid); + + if (target_has_execution) + break; + } + } + + do_cleanups (old_chain); + + return inf != NULL; } /* Prune away automatically added program spaces that aren't required |