Please review this change that fixes crashes by jmm_GetThreadInfo() call. There are several issues: - ThreadIdTable::lazy_initialize() has typical double-checked locking pattern without proper memory barrier, that may result in uninitialized/partial initialized table to be observed by other threads. Added release/acquire barrier to address this issue. - Query ThreadIdTable can race add/remove thread operations. In short, the thread returned from the query may be freed. Fortunately, jmm_GetThreadInfo() acquires stable thread list before query, so we only need to make sure that returned thread is in the list (checking thread->is_exiting() does not help due to the race) - I moved thread Id insertion code from ThreadSMR to Threads, to be symmetric to thread Id removal code.
Tests: - [x] Tier1 on Linux and MacOSX (fastdebug) (`tools/javac/annotations/typeAnnotations/IncorrectCastOffsetTest.java` failure seems unrelated, it also fails in master) ------------- Commit messages: - Remove white spaces - Cleanup - v3 - Update copyright years - v2 - v1 - v0 Changes: https://git.openjdk.org/jdk/pull/30105/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=30105&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8323792 Stats: 32 lines in 5 files changed: 14 ins; 6 del; 12 mod Patch: https://git.openjdk.org/jdk/pull/30105.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/30105/head:pull/30105 PR: https://git.openjdk.org/jdk/pull/30105
