> 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)
Zhengyu Gu has updated the pull request incrementally with one additional commit since the last revision: Add Kevin's test case ------------- Changes: - all: https://git.openjdk.org/jdk/pull/30105/files - new: https://git.openjdk.org/jdk/pull/30105/files/15acd0da..6ae0cb01 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=30105&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=30105&range=00-01 Stats: 243 lines in 1 file changed: 243 ins; 0 del; 0 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
