diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3fe50fe176e..ff93d0b2014 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2011-05-20  Pedro Alves  <pedro@codesourcery.com>
+
+	* infrun.c (proceed): Set previous_inferior_ptid here.
+	(init_wait_for_inferior): Initialize previous_inferior_ptid from
+	inferior_ptid, not null_ptid.
+	(wait_for_inferior): Don't initialize previous_inferior_ptid here.
+	(fetch_inferior_event): Nor here.
+
 2011-05-20  Pedro Alves  <pedro@codesourcery.com>
 
 	* inf-loop.c (inferior_event_handler): Only output a message if
diff --git a/gdb/infrun.c b/gdb/infrun.c
index dac8b0d90d5..36d265cb175 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -2071,6 +2071,9 @@ proceed (CORE_ADDR addr, enum target_signal siggnal, int step)
       return;
     }
 
+  /* We'll update this if & when we switch to a new thread.  */
+  previous_inferior_ptid = inferior_ptid;
+
   regcache = get_current_regcache ();
   gdbarch = get_regcache_arch (regcache);
   aspace = get_regcache_aspace (regcache);
@@ -2290,7 +2293,7 @@ init_wait_for_inferior (void)
 
   target_last_wait_ptid = minus_one_ptid;
 
-  previous_inferior_ptid = null_ptid;
+  previous_inferior_ptid = inferior_ptid;
   init_infwait_state ();
 
   /* Discard any skipped inlined frames.  */
@@ -2654,9 +2657,6 @@ wait_for_inferior (void)
   ecs = &ecss;
   memset (ecs, 0, sizeof (*ecs));
 
-  /* We'll update this if & when we switch to a new thread.  */
-  previous_inferior_ptid = inferior_ptid;
-
   while (1)
     {
       struct cleanup *old_chain;
@@ -2720,9 +2720,6 @@ fetch_inferior_event (void *client_data)
 
   memset (ecs, 0, sizeof (*ecs));
 
-  /* We'll update this if & when we switch to a new thread.  */
-  previous_inferior_ptid = inferior_ptid;
-
   /* We're handling a live event, so make sure we're doing live
      debugging.  If we're looking at traceframes while the target is
      running, we're going to need to get back to that mode after