On Thu, 4 Aug 2022 15:54:29 GMT, Alan Bateman <al...@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.
>
> src/java.base/share/classes/sun/nio/ch/Util.java line 233:
> 
>> 231:         }
>> 232: 
>> 233:         BufferCache cache = bufferCache.get();
> 
> I assume JLA is no longer needed.

Right, I forgot to remove this one.

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

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

Reply via email to