Hi Ivan,
The code is correct as written but there might be some creep in the end
time due to the sampling of System.nanoTime.
I would be inclined to calculate the final time of the timeout once
and then compare simply with the current nanotime.
long end = (timeout == 0) ? Long.MAX_VALUE : (System.nanoTime() +
timeout * 1000000);
Then the test in the loop can be:
if (System.nanoTime() > end) {
return null;
}
Roger (Not a Reviewer)
On 2/24/2014 12:59 AM, Ivan Gerasimov wrote:
Hello!
ReferenceQueue.remove(timeout) may return too early, i.e. before the
specified timeout has elapsed.
Would you please review the fix?
The change also includes a regression test, which can be used to
demonstrate the issue.
BUGURL: https://bugs.openjdk.java.net/browse/JDK-6853696
WEBREV: http://cr.openjdk.java.net/~igerasim/6853696/0/webrev/
Sincerely yours,
Ivan