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
