< prev index next >

src/java.base/share/classes/sun/nio/ch/Util.java

Print this page
rev 50306 : imported patch loom-fibers

@@ -33,28 +33,30 @@
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.Set;
+
+import jdk.internal.misc.JavaLangAccess;
+import jdk.internal.misc.SharedSecrets;
 import jdk.internal.misc.Unsafe;
 import sun.security.action.GetPropertyAction;
 import java.io.IOException;
 
 public class Util {
+    private static JavaLangAccess JLA = SharedSecrets.getJavaLangAccess();
 
     // -- Caches --
 
     // The number of temp buffers in our pool
     private static final int TEMP_BUF_POOL_SIZE = IOUtil.IOV_MAX;
 
     // The max size allowed for a cached temp buffer, in bytes
     private static final long MAX_CACHED_BUFFER_SIZE = getMaxCachedBufferSize();
 
     // Per-thread cache of temporary direct buffers
-    private static ThreadLocal<BufferCache> bufferCache =
-        new ThreadLocal<BufferCache>()
-    {
+    private static ThreadLocal<BufferCache> bufferCache = new ThreadLocal<>() {
         @Override
         protected BufferCache initialValue() {
             return new BufferCache();
         }
     };

@@ -218,11 +220,11 @@
         // below) given that we won't put the new buffer in the cache.
         if (isBufferTooLarge(size)) {
             return ByteBuffer.allocateDirect(size);
         }
 
-        BufferCache cache = bufferCache.get();
+        BufferCache cache = JLA.getKernelThreadLocal(bufferCache);
         ByteBuffer buf = cache.get(size);
         if (buf != null) {
             return buf;
         } else {
             // No suitable buffer in the cache so we need to allocate a new

@@ -245,11 +247,11 @@
         if (isBufferTooLarge(size)) {
             return ByteBuffer.allocateDirect(size + alignment - 1)
                     .alignedSlice(alignment);
         }
 
-        BufferCache cache = bufferCache.get();
+        BufferCache cache = JLA.getKernelThreadLocal(bufferCache);
         ByteBuffer buf = cache.get(size);
         if (buf != null) {
             if (buf.alignmentOffset(0, alignment) == 0) {
                 return buf;
             }

@@ -282,11 +284,11 @@
             free(buf);
             return;
         }
 
         assert buf != null;
-        BufferCache cache = bufferCache.get();
+        BufferCache cache = JLA.getKernelThreadLocal(bufferCache);
         if (!cache.offerFirst(buf)) {
             // cache is full
             free(buf);
         }
     }

@@ -304,11 +306,11 @@
             free(buf);
             return;
         }
 
         assert buf != null;
-        BufferCache cache = bufferCache.get();
+        BufferCache cache = JLA.getKernelThreadLocal(bufferCache);
         if (!cache.offerLast(buf)) {
             // cache is full
             free(buf);
         }
     }
< prev index next >