On Wed, 5 May 2021 10:16:29 GMT, David Holmes <[email protected]> wrote:
> Our code is littered with API's that take, or manifest, a Thread* and then
> assert/guarantee that it must be a JavaThread, rather than taking/manifesting
> a JavaThread in the first place. The main reason for this is that the TRAPS
> macro, used in relation to exception generation and processing, is declared
> as "Thread* THREAD". In practice only JavaThreads that can execute Java code
> can generate arbitrary exceptions, because it requires executing Java code.
> In other places we can get away with other kinds of threads "throwing"
> exceptions because they are only pre-allocated instances that require no Java
> code execution (e.g. OOME), or when executed by a non-JavaThread the code
> actually by-passes the logic would throw an exception. Such code also
> eventually clears the exception and reports the OOM by some other means. We
> have been progressively untangling these code paths and modifying TRAPS/CHECK
> usage so that only JavaThreads will call TRAPS methods and throw exceptions.
> Having done th
at pre-work we are now ready to convert TRAPS to be "JavaThread* THREAD" and
that is what this change does. The resulting changes are largely mechanical:
>
> - declarations of "Thread* THREAD" become "JavaThread* THREAD" (where THREAD
> is needed for exceptions, otherwise THREAD is renamed to current)
> - methods that took a Thread* parameter that was always THREAD, now take a
> JavaThread* param
> - Manifestations of Thread::current() become JavaThread::current()
> - THREAD->as_Java_thread() becomes just THREAD
> - THREAD->is_Java_thread() is reworked so that THREAD is "current"
>
> There are still places where a CompilerThread (which is a JavaThread but may
> not be able to execute Java code) calls a TRAPS function (primarily where
> OOME is possible). Fixing that would be a future RFE and may not be possible
> without reworking a lot of the allocation code paths.
>
> Testing:
> - tiers 1-8 on Linux-x64
> - all builds in tiers 1-4
> - tiers 1-3 on all platforms
>
> Thanks,
> David
src/hotspot/share/jfr/recorder/checkpoint/types/jfrThreadState.cpp line 108:
> 106:
> 107: // caller needs ResourceMark
> 108: const char* get_java_thread_name(const JavaThread* t) {
Nit: Better to rename it: t => jt
-------------
PR: https://git.openjdk.java.net/jdk/pull/3877