This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]