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

This pull request has now been integrated.

Changeset: 02f895c5
Author:    David Holmes <[email protected]>
URL:       
https://git.openjdk.java.net/jdk/commit/02f895c5f6f6de38549337d45ed8ba4c446e9677
Stats:     535 lines in 120 files changed: 14 ins; 28 del; 493 mod

8252685: APIs that require JavaThread should take JavaThread arguments

Reviewed-by: coleenp, sspitsyn, kvn, iklam

-------------

PR: https://git.openjdk.java.net/jdk/pull/3877

Reply via email to