< prev index next >

src/java.base/share/classes/java/nio/Bits.java

Print this page

        

@@ -30,10 +30,12 @@
 import jdk.internal.misc.JavaNioAccess;
 import jdk.internal.misc.JavaLangRefAccess;
 import jdk.internal.misc.SharedSecrets;
 import jdk.internal.misc.Unsafe;
 import jdk.internal.misc.VM;
+import jdk.internal.ref.CleanerFactory;
+import jdk.internal.ref.CleanerImpl;
 
 /**
  * Access to bits, native and otherwise.
  */
 

@@ -627,11 +629,12 @@
         final JavaLangRefAccess jlra = SharedSecrets.getJavaLangRefAccess();
 
         // retry while helping enqueue pending Reference objects
         // which includes executing pending Cleaner(s) which includes
         // Cleaner(s) that free direct buffer memory
-        while (jlra.tryHandlePendingReference()) {
+        while (jlra.tryHandlePendingReference() | // use non-short-circuit or
+               CleanerImpl.getCleanerImpl(CleanerFactory.cleaner()).drainQueue()) {
             if (tryReserveMemory(size, cap)) {
                 return;
             }
         }
 

@@ -649,11 +652,12 @@
                     return;
                 }
                 if (sleeps >= MAX_SLEEPS) {
                     break;
                 }
-                if (!jlra.tryHandlePendingReference()) {
+                if (!jlra.tryHandlePendingReference() & // use non-short-circuit and
+                    !CleanerImpl.getCleanerImpl(CleanerFactory.cleaner()).drainQueue()) {
                     try {
                         Thread.sleep(sleepTime);
                         sleepTime <<= 1;
                         sleeps++;
                     } catch (InterruptedException e) {
< prev index next >