Fix gdbserver regression exposed by gdb.threads/multi-create-ns-info-thr.exp
authorPedro Alves <palves@redhat.com>
Fri, 29 Sep 2017 12:06:34 +0000 (13:06 +0100)
committerPedro Alves <palves@redhat.com>
Fri, 29 Sep 2017 12:06:34 +0000 (13:06 +0100)
commit94c207e097a3a30ce71fc8f700325113968c276b
treedb4cc65cb31bde9bcfbdac32c6ab0be00d540b3e
parentf6ac8c52c955b487dcb56d05fc93fced7b203294
Fix gdbserver regression exposed by gdb.threads/multi-create-ns-info-thr.exp

Commit 8629910955a7 ("Add thread_db_notice_clone to gdbserver")
introduced calls into libthread_db without making sure that the
current thread is pointing to a know-stopped thread.  This resulted in
sometimes thread_db_notice_clone failing->find_one_thread failing like
this, as seen when running gdb.threads/multi-create-ns-info-thr.exp:

~~~
  Thread <6> executing
  Thread <7> executing
  gdbserver: PID mismatch!  Expected 27472, got 27471
  gdbserver: Cannot find thread after clone.

  Thread <1000> executing
  Thread <1001> executing
~~~

Things go south from here and sometimes that ends up resulting in
gdbserver crashing and the test failing.

gdb/gdbserver/ChangeLog:
2017-09-29  Pedro Alves  <palves@redhat.com>

* linux-low.c (handle_extended_wait): Pass parent thread instead
of process to thread_db_notice_clone.
* linux-low.h (thread_db_notice_clone): Replace parent process
parameter with parent thread parameter.
* thread-db.c (find_one_thread): Add comment.
(thread_db_notice_clone): Replace parent process parameter with
parent thread parameter.  Temporarily switch to the parent thread.
gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-low.c
gdb/gdbserver/linux-low.h
gdb/gdbserver/thread-db.c