Don't write to inferior_ptid in remote.c
authorPedro Alves <palves@redhat.com>
Thu, 18 Jun 2020 20:28:24 +0000 (21:28 +0100)
committerPedro Alves <palves@redhat.com>
Thu, 18 Jun 2020 22:08:14 +0000 (23:08 +0100)
gdb/ChangeLog:
2020-06-18  Pedro Alves  <palves@redhat.com>

* remote.c (remote_target::remote_notice_new_inferior): Use
switch_to_thread instead of writing to inferior_ptid directly.
(remote_target::add_current_inferior_and_thread): Use
switch_to_no_thread instead of writing to inferior_ptid directly.
(extended_remote_target::attach): Use switch_to_inferior_no_thread
and switch_to_thread instead of using set_current_inferior or
writing to inferior_ptid directly.

gdb/ChangeLog
gdb/remote.c

index b02a57624194b275c7f7f2fc9a5ec8033fbd3f56..334c227574be6d1328990cda368e8166f54cfb69 100644 (file)
@@ -1,3 +1,13 @@
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+       * remote.c (remote_target::remote_notice_new_inferior): Use
+       switch_to_thread instead of writing to inferior_ptid directly.
+       (remote_target::add_current_inferior_and_thread): Use
+       switch_to_no_thread instead of writing to inferior_ptid directly.
+       (extended_remote_target::attach): Use switch_to_inferior_no_thread
+       and switch_to_thread instead of using set_current_inferior or
+       writing to inferior_ptid directly.
+
 2020-06-18  Pedro Alves  <palves@redhat.com>
 
        * tracectf.c (ctf_target_open): Switch to added thread instead of
index c73eb6e9e136f4d611aeb631b3641ceda5b238b1..fd89f2c0840afd4a661e69472ab849db6a7d6cb8 100644 (file)
@@ -2493,8 +2493,9 @@ remote_target::remote_notice_new_inferior (ptid_t currthread, int executing)
            thread_change_ptid (this, inferior_ptid, currthread);
          else
            {
-             remote_add_thread (currthread, running, executing);
-             inferior_ptid = currthread;
+             thread_info *thr
+               = remote_add_thread (currthread, running, executing);
+             switch_to_thread (thr);
            }
          return;
        }
@@ -4346,9 +4347,10 @@ remote_target::add_current_inferior_and_thread (char *wait_status)
   struct remote_state *rs = get_remote_state ();
   bool fake_pid_p = false;
 
-  inferior_ptid = null_ptid;
+  switch_to_no_thread ();
 
-  /* Now, if we have thread information, update inferior_ptid.  */
+  /* Now, if we have thread information, update the current thread's
+     ptid.  */
   ptid_t curr_ptid = get_current_thread (wait_status);
 
   if (curr_ptid != null_ptid)
@@ -5760,7 +5762,7 @@ remote_target::remote_detach_1 (inferior *inf, int from_tty)
     }
   else
     {
-      inferior_ptid = null_ptid;
+      switch_to_no_thread ();
       detach_inferior (current_inferior ());
     }
 }
@@ -5906,33 +5908,33 @@ extended_remote_target::attach (const char *args, int from_tty)
             target_pid_to_str (ptid_t (pid)).c_str ());
     }
 
-  set_current_inferior (remote_add_inferior (false, pid, 1, 0));
+  switch_to_inferior_no_thread (remote_add_inferior (false, pid, 1, 0));
 
   inferior_ptid = ptid_t (pid);
 
   if (target_is_non_stop_p ())
     {
-      struct thread_info *thread;
-
       /* Get list of threads.  */
       update_thread_list ();
 
-      thread = first_thread_of_inferior (current_inferior ());
-      if (thread)
-       inferior_ptid = thread->ptid;
-      else
-       inferior_ptid = ptid_t (pid);
+      thread_info *thread = first_thread_of_inferior (current_inferior ());
+      if (thread != nullptr)
+       switch_to_thread (thread);
 
       /* Invalidate our notion of the remote current thread.  */
       record_currthread (rs, minus_one_ptid);
     }
   else
     {
-      /* Now, if we have thread information, update inferior_ptid.  */
-      inferior_ptid = remote_current_thread (inferior_ptid);
+      /* Now, if we have thread information, update the main thread's
+        ptid.  */
+      ptid_t curr_ptid = remote_current_thread (ptid_t (pid));
 
       /* Add the main thread to the thread list.  */
-      thread_info *thr = add_thread_silent (this, inferior_ptid);
+      thread_info *thr = add_thread_silent (this, curr_ptid);
+
+      switch_to_thread (thr);
+
       /* Don't consider the thread stopped until we've processed the
         saved stop reply.  */
       set_executing (this, thr->ptid, true);