From 5a2901d9edbe95aa5d59faf852bcded451d12a38 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Sun, 10 Sep 2006 16:21:03 +0000 Subject: [PATCH] PR threads/2149 * infrun.c (handle_inferior_event): Context switch after fork and exec events. --- gdb/ChangeLog | 6 ++++++ gdb/infrun.c | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a65232186d..73ab0678e1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2006-09-10 Daniel Jacobowitz + + PR threads/2149 + * infrun.c (handle_inferior_event): Context switch after fork + and exec events. + 2006-09-10 Daniel Jacobowitz * infcall.c (call_function_by_hand): Check for function pointer diff --git a/gdb/infrun.c b/gdb/infrun.c index 1c31a846bb..61afab28a9 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1411,6 +1411,12 @@ handle_inferior_event (struct execution_control_state *ecs) pending_follow.fork_event.parent_pid = PIDGET (ecs->ptid); pending_follow.fork_event.child_pid = ecs->ws.value.related_pid; + if (!ptid_equal (ecs->ptid, inferior_ptid)) + { + context_switch (ecs); + flush_cached_frames (); + } + stop_pc = read_pc (); stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid, 0); @@ -1469,6 +1475,12 @@ handle_inferior_event (struct execution_control_state *ecs) ecs->random_signal = !bpstat_explains_signal (stop_bpstat); inferior_ptid = ecs->saved_inferior_ptid; + if (!ptid_equal (ecs->ptid, inferior_ptid)) + { + context_switch (ecs); + flush_cached_frames (); + } + /* If no catchpoint triggered for this, then keep going. */ if (ecs->random_signal) {