> This is an attempt to fix inconsistent behavior of TerminatingThreadLocal(s) 
> when used internally in JDK for per-carrier-thread caches of native 
> ByteBuffer(s) and NativeBuffer(s). If used from virtual thread, such 
> TerminatingThreadLocal(s) are not registered with the carrier thread for the 
> cleanup.
> The fix introduces an internal CarrierThreadLocal subclass of ThreadLocal 
> which rewires its API methods to use current thread's carrier thread as the 
> source of ThreadLocalMap instead of current thread itself (if it is a 
> VirtualThread for example). TerminatingThreadLocal is now a subclass of 
> CarrierThreadLocal. It seems only per-carrier-thread caching is a usecase for 
> it. The uses of JavaLangAccess in various places to access a carrier-thread 
> value of given ThreadLocal has been replaced by public API calls and the use 
> of CarrierThreadLocal instead of plain ThreadLocal. JavaLangAccess is still 
> used to dispatch the CarrierThreadLocal API methods, but only for that. Would 
> someone be tempted to use JavaLangAccess methods directly, they now require 
> CarrierThreadLocal argument to guard against missuses.
> The REGISTRY of TerminatingThreadLocal(s) that tracks which of them have 
> values bound to a particular carrier thread is now implemented conveniently  
> with a CarrierThreadLocal.
> The test is expanded with a case that demonstrates a situation where a 
> carrier thread is terminated. Since it must wait for 30 seconds for that to 
> happen, only one of the test cases is performed in this mode. The correct 
> logic of TerminatingThreadLocal is still verified with all test-cases using 
> platform threads that can be terminated more rapidly.

Peter Levart has updated the pull request incrementally with one additional 
commit since the last revision:

  Removed unused JLA, SharedSecrets, added @enablePreview test annotation

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/9743/files
  - new: https://git.openjdk.org/jdk/pull/9743/files/fa2078e4..2339b87f

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=9743&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=9743&range=00-01

  Stats: 10 lines in 2 files changed: 3 ins; 3 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/9743.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/9743/head:pull/9743

PR: https://git.openjdk.org/jdk/pull/9743

Reply via email to