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

* inf-ptrace.c (inf_ptrace_target::create_inferior): Switch to the
added thread.
(inf_ptrace_target::attach): Don't write to inferior_ptid.  Switch
to the added thread.
(inf_ptrace_target::detach_success): Use switch_to_no_thread
instead of writing to inferior_ptid.

gdb/ChangeLog
gdb/inf-ptrace.c

index 6854b8f9a20e417d54864698212e1b9fadf53a0b..4bc9c2818bd4682fd2dc627c9e71a775c35b1224 100644 (file)
@@ -1,3 +1,12 @@
+2020-06-18  Pedro Alves  <palves@redhat.com>
+
+       * inf-ptrace.c (inf_ptrace_target::create_inferior): Switch to the
+       added thread.
+       (inf_ptrace_target::attach): Don't write to inferior_ptid.  Switch
+       to the added thread.
+       (inf_ptrace_target::detach_success): Use switch_to_no_thread
+       instead of writing to inferior_ptid.
+
 2020-06-18  Pedro Alves  <palves@redhat.com>
 
        * gdbarch-selftests.c: Include "progspace-and-thread.h".
index a83ffcc87989b90416c4df58378dc26f883d3136..d25d226abba474faeb0e79204440f601c3bec645 100644 (file)
@@ -90,9 +90,6 @@ inf_ptrace_target::create_inferior (const char *exec_file,
                                    const std::string &allargs,
                                    char **env, int from_tty)
 {
-  pid_t pid;
-  ptid_t ptid;
-
   /* Do not change either targets above or the same target if already present.
      The reason is the target stack is shared across multiple inferiors.  */
   int ops_already_pushed = target_is_pushed (this);
@@ -105,14 +102,15 @@ inf_ptrace_target::create_inferior (const char *exec_file,
       unpusher.reset (this);
     }
 
-  pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL,
-                      NULL, NULL, NULL);
+  pid_t pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL,
+                            NULL, NULL, NULL);
 
-  ptid = ptid_t (pid);
+  ptid_t ptid (pid);
   /* We have something that executes now.  We'll be running through
      the shell at this point (if startup-with-shell is true), but the
      pid shouldn't change.  */
-  add_thread_silent (this, ptid);
+  thread_info *thr = add_thread_silent (this, ptid);
+  switch_to_thread (thr);
 
   unpusher.release ();
 
@@ -190,11 +188,12 @@ inf_ptrace_target::attach (const char *args, int from_tty)
   inf = current_inferior ();
   inferior_appeared (inf, pid);
   inf->attach_flag = 1;
-  inferior_ptid = ptid_t (pid);
 
   /* Always add a main thread.  If some target extends the ptrace
      target, it should decorate the ptid later with more info.  */
-  thread_info *thr = add_thread_silent (this, inferior_ptid);
+  thread_info *thr = add_thread_silent (this, ptid_t (pid));
+  switch_to_thread (thr);
+
   /* Don't consider the thread stopped until we've processed its
      initial SIGSTOP stop.  */
   set_executing (this, thr->ptid, true);
@@ -232,7 +231,7 @@ inf_ptrace_target::detach (inferior *inf, int from_tty)
 void
 inf_ptrace_target::detach_success (inferior *inf)
 {
-  inferior_ptid = null_ptid;
+  switch_to_no_thread ();
   detach_inferior (inf);
 
   maybe_unpush_target ();