[debugserver] Fix IsUserReady thread filtering
authorFrederic Riss <friss@apple.com>
Wed, 6 Mar 2019 21:56:14 +0000 (21:56 +0000)
committerFrederic Riss <friss@apple.com>
Wed, 6 Mar 2019 21:56:14 +0000 (21:56 +0000)
commitfcda044d22b8632c637a92d3031deae234014b24
tree3f91af940eb6d4b04d58c35f1ec8bbc2c9e33fe8
parent94b1ff72f57ac38052aa0a44b12904fba04d5bb6
[debugserver] Fix IsUserReady thread filtering

Summary:
In 2010 (r118866), filtering code was added to debugserver to avoid reporting threads
that were "not ready to be displayed to the user". This code inspects the thread's
state and discards threads marked 'uninterruptible'. Turns out, this state is pretty
common and not only a characterisitic of 'user-readiness'. This filtering was tracked
down as the source of the flakiness of TestQueues and TestConcurrent* with the symptom
of missing threads.

We discussed with the kernel team and there should be no need for us to filter the
restult of task_threads(). Everything that is returned from there can be examined.
So I went on and tried to remove the filtering completely. This produces other test
failures, where we were reporting more theads than expected. Always threads that had
been terminated, but weren't removed from the task bookkeeping structures yet. Those
threads always had a PC of 0.

This patch changes the heuristic to make the filtering a little less strict and only
rejects threads that are 'uninteruptible' *and* have a PC of 0. This has proven to be
solid in my testing.

Reviewers: jasonmolenda, clayborg, jingham

Subscribers: jdoerfert, lldb-commits

Differential Revision: https://reviews.llvm.org/D58912

llvm-svn: 355555
lldb/tools/debugserver/source/MacOSX/MachThread.cpp