On Feb 24 2014, at 06:37 , roger riggs <roger.ri...@oracle.com> wrote:
> 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); I hate seeing numerical constants TimeUnit.MILLISECONDS.toNanos(timeout) > > Then the test in the loop can be: > > if (System.nanoTime() > end) { > return null; > } This compare should be re-written in the overflow compensating style Martin mentions. Mike > > 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 >