> 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

Reply via email to