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;
+ }
}
}
}
/**