RFR 9: 8065372: Object.wait(ms, ns) timeout returns early

David Holmes david.holmes at oracle.com
Wed Nov 19 23:41:40 UTC 2014


On 20/11/2014 1:21 AM, roger riggs wrote:
> Hi,
>
> Created a new issue and webrev for this correction:
>
> Please review:
>
>     http://cr.openjdk.java.net/~rriggs/webrev-wait-8065372/

Fine by me.

Thanks,
David

> Roger
>
>
> On 11/18/2014 11:02 AM, Martin Buchholz wrote:
>> Here I'm just trying to fix the problem that Object.wait(millis,nanos)
>> trivially returns early.
>>> That seems overly complex - after checking for valid values of
>>> timeout and
>>> nanos you simply need:
>>>
>>> if (nanos > 0) timeout++;
>>>
>>> to ensure the >= requirement.
>> Sure, the miminal diff is:
>>
>> diff --git a/src/java.base/share/classes/java/lang/Object.java
>> b/src/java.base/share/classes/java/lang/Object.java
>> --- a/src/java.base/share/classes/java/lang/Object.java
>> +++ b/src/java.base/share/classes/java/lang/Object.java
>> @@ -453,7 +453,7 @@
>>                                   "nanosecond timeout value out of
>> range");
>>           }
>>
>> -        if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
>> +        if (nanos != 0) {
>>               timeout++;
>>           }
>>
>>> But seriously we should just deprecate this version as we're not
>>> likely to
>>> get any underlying OS mechanisms for doing nanosecond resolution timed
>>> blocking actions.
>> Object.wait(millis, nanos) is an ugly API (I wish for both a public
>> and hotspot internal API that simply operated on nanoseconds), but
>> it's not totally awful.  It's not obvious to me that computing
>> advances over the lifetime of the java platform won't allow
>> sub-millisecond scheduling, and other APIs that do operate on
>> nanoseconds (like Process.waitFor) should call this API.
>



More information about the core-libs-dev mailing list