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

Reply via email to