[2/8] Fix follow-fork latent bug
Commit Message
A later patch in the series adds an assertion to switch_to_thread that
the resulting inferior_ptid always matches the "current_inferior()"
inferior. This exposed a latent bug in the follow-fork code, where
we're building the fork child inferior. We're switching
inferior_ptid, but not the current inferior object...
gdb/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* infrun.c (follow_fork_inferior): Also switch the current
inferior.
---
gdb/infrun.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
Comments
Pedro Alves <palves@redhat.com> writes:
> - old_chain = save_inferior_ptid ();
> - save_current_program_space ();
> + old_chain = save_current_space_and_thread ();
>
> inferior_ptid = child_ptid;
> add_thread (inferior_ptid);
> + set_current_inferior (child_inf);
> child_inf->symfile_flags = SYMFILE_NO_READ;
Can we set up child thread_info inferior and pspace first, and then,
call switch_to_thread_no_regs to switch them in one go?
>
> /* If this is a vfork child, then the address-space is
> @@ -631,6 +631,7 @@ holding the child stopped. Try \"set detach-on-fork\" or \
>
> inferior_ptid = child_ptid;
> add_thread (inferior_ptid);
> + set_current_inferior (child_inf);
@@ -498,11 +498,11 @@ holding the child stopped. Try \"set detach-on-fork\" or \
child_inf->gdbarch = parent_inf->gdbarch;
copy_inferior_target_desc_info (child_inf, parent_inf);
- old_chain = save_inferior_ptid ();
- save_current_program_space ();
+ old_chain = save_current_space_and_thread ();
inferior_ptid = child_ptid;
add_thread (inferior_ptid);
+ set_current_inferior (child_inf);
child_inf->symfile_flags = SYMFILE_NO_READ;
/* If this is a vfork child, then the address-space is
@@ -631,6 +631,7 @@ holding the child stopped. Try \"set detach-on-fork\" or \
inferior_ptid = child_ptid;
add_thread (inferior_ptid);
+ set_current_inferior (child_inf);
/* If this is a vfork child, then the address-space is shared
with the parent. If we detached from the parent, then we can