> 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: @dholmes-ora's comments ------------- Changes: - all: https://git.openjdk.org/jdk/pull/30105/files - new: https://git.openjdk.org/jdk/pull/30105/files/caa63ced..6db1c653 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=30105&range=03 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=30105&range=02-03 Stats: 18 lines in 4 files changed: 4 ins; 7 del; 7 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
