src/share/classes/java/lang/ref/ReferenceQueue.java

Print this page

        

@@ -136,15 +136,21 @@
             throw new IllegalArgumentException("Negative timeout value");
         }
         synchronized (lock) {
             Reference<? extends T> r = reallyPoll();
             if (r != null) return r;
+            long before = (timeout == 0) ? 0 : System.nanoTime();
             for (;;) {
                 lock.wait(timeout);
                 r = reallyPoll();
                 if (r != null) return r;
-                if (timeout != 0) return null;
+                if (timeout != 0) {
+                    long after = System.nanoTime();
+                    timeout -= (after - before) / 1000000;
+                    if (timeout <= 0) return null;
+                    before = after;
+                }
             }
         }
     }
 
     /**