This is the mail archive of the
gdb-cvs@sourceware.org
mailing list for the GDB project.
[binutils-gdb] Fix follow-fork latent bug
- From: Pedro Alves <palves at sourceware dot org>
- To: gdb-cvs at sourceware dot org
- Date: 13 Apr 2017 15:19:22 -0000
- Subject: [binutils-gdb] Fix follow-fork latent bug
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=2a00d7ce26a6ee15e3712b045c8b7932278ea23b
commit 2a00d7ce26a6ee15e3712b045c8b7932278ea23b
Author: Pedro Alves <palves@redhat.com>
Date: Thu Apr 13 16:15:34 2017 +0100
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 <palves@redhat.com>
* infrun.c (follow_fork_inferior): Also switch the current
inferior.
Diff:
---
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 <palves@redhat.com>
+ * infrun.c (follow_fork_inferior): Also switch the current
+ inferior.
+
+2017-04-13 Pedro Alves <palves@redhat.com>
+
* 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