On Fri, 5 Aug 2022 09:54:36 GMT, Peter Levart <plev...@openjdk.org> wrote:
>> 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 Marked as reviewed by alanb (Reviewer). ------------- PR: https://git.openjdk.org/jdk/pull/9743