RFC: more robust handling of terminated but still attached threads
David Holmes
david.holmes at oracle.com
Wed Jul 4 06:53:04 UTC 2018
After more experimentation and code scrutiny I could only find one place
where this is actually a problem, so I will fix that under 820578.
David
On 3/07/2018 7:21 PM, David Holmes wrote:
> Bug: https://bugs.openjdk.java.net/browse/JDK-8205878
>
> We hit asserts or trigger SEGVs when we try to operate on a native
> thread ID for a JNI-attached thread that has actually terminated but
> which did not detach first. It still appears in the threadsList and we
> try to process it during DumpOnExit (but there are probably other
> operations that could run into this in the general case).
>
> Fixing the tests is easy. But the more general question is how to make
> the VM code more robust in the face of this situation.
>
> At the lowest level we can watch for ESRCH from pthread_* functions and
> try to program in alternate logic that gives some "result" for that thread.
>
> At higher-level we may be able to heuristically guess that the native
> thread has terminated and so skip it in ALL_JAVA_THREADS and similar
> constructors. For example pthread_kill(t,0) can heuristically check if
> 't' is not alive as it may return ESRCH. But of course if t terminated
> then it is entirely possible that the pthread_t value for it has been
> reused. And if t is not going to detach we could be racing with its
> termination anyway - so the heuristic may pass and we still hit a
> low-level assert or SEGV.
>
> What do people think? Do we try to deal with this at the bottom, or at
> the top, or all the way through? (There's obviously a diminishing return
> on effort versus benefit here.)
>
> Thanks,
> David
More information about the hotspot-runtime-dev
mailing list