diff options
author | Pedro Alves <palves@redhat.com> | 2008-11-20 13:23:26 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2008-11-20 13:23:26 +0000 |
commit | 607cecd2d4e6f0533f7e28f18d088ff4ec1109dd (patch) | |
tree | 957ce889e9a03607aba49da13ad9454a9e22329d | |
parent | 78bc95e3ba62e558030ff978725cdbbb48564f96 (diff) | |
download | gdb-607cecd2d4e6f0533f7e28f18d088ff4ec1109dd.zip gdb-607cecd2d4e6f0533f7e28f18d088ff4ec1109dd.tar.gz gdb-607cecd2d4e6f0533f7e28f18d088ff4ec1109dd.tar.bz2 |
* infrun.c (resume): If following a fork, reread the current
thread. Avoid dereferencing a possibly dangling pointer.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/infrun.c | 8 |
2 files changed, 11 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4eabe76..62b98fe 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2008-11-20 Pedro Alves <pedro@codesourcery.com> + + * infrun.c (resume): If following a fork, reread the current + thread. Avoid dereferencing a possibly dangling pointer. + 2008-11-19 Doug Evans <dje@google.com> * inferior.h (proceed_to_finish): Delete, unused. diff --git a/gdb/infrun.c b/gdb/infrun.c index f218fa0..93ee00b 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1053,6 +1053,10 @@ a command like `return' or `jump' to continue execution.")); pending_follow.kind = TARGET_WAITKIND_SPURIOUS; if (follow_fork ()) should_resume = 0; + + /* Following a child fork will change our notion of current + thread. */ + tp = inferior_thread (); break; case TARGET_WAITKIND_EXECD: @@ -1148,11 +1152,11 @@ a command like `return' or `jump' to continue execution.")); displaced_step_dump_bytes (gdb_stdlog, buf, sizeof (buf)); } - target_resume (resume_ptid, step, sig); - /* Avoid confusing the next resume, if the next stop/resume happens to apply to another thread. */ tp->stop_signal = TARGET_SIGNAL_0; + + target_resume (resume_ptid, step, sig); } discard_cleanups (old_cleanups); |