> 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 two additional commits since the last revision: - Revert threads.cpp changes - Fix ------------- Changes: - all: https://git.openjdk.org/jdk/pull/30105/files - new: https://git.openjdk.org/jdk/pull/30105/files/6db1c653..1a9dc656 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=30105&range=04 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=30105&range=03-04 Stats: 13 lines in 1 file changed: 7 ins; 5 del; 1 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
