From 2a00d7ce26a6ee15e3712b045c8b7932278ea23b Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 13 Apr 2017 16:15:34 +0100 Subject: [PATCH] Fix follow-fork latent bug 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: 2017-04-13 Pedro Alves * infrun.c (follow_fork_inferior): Also switch the current inferior. --- gdb/ChangeLog | 5 +++++ gdb/infrun.c | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index acf59e5..4160e9f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2017-04-13 Pedro Alves + * infrun.c (follow_fork_inferior): Also switch the current + inferior. + +2017-04-13 Pedro Alves + * breakpoint.c (watch_command_1): Save watchpoint-frame info before calling create_internal_breakpoint. diff --git a/gdb/infrun.c b/gdb/infrun.c index b5eb4ab..c7298a3 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -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 -- 2.7.4