RFR 8157318: ThreadedSeedGenerator uses System.currentTimeMillis and stops generating when time is set back
Weijun Wang
weijun.wang at oracle.com
Tue Jun 21 01:39:50 UTC 2016
Ping again.
On 6/16/2016 10:32, Wang Weijun wrote:
>
>> On Jun 16, 2016, at 6:37 AM, David M. Lloyd <david.lloyd at redhat.com> wrote:
>>
>> This will not work because System.nanoTime() can be negative and wrap around. You can't compare one nanoTime to another, only differences are useful.
>
> Yes, you are right. How about this then?
>
> diff --git a/src/java.base/share/classes/sun/security/provider/SeedGenerator.java b/src/java.base/share/classes/sun/security/provider/SeedGenerator.java
> --- a/src/java.base/share/classes/sun/security/provider/SeedGenerator.java
> +++ b/src/java.base/share/classes/sun/security/provider/SeedGenerator.java
> @@ -354,8 +354,8 @@
> // We wait 250milli quanta, so the minimum wait time
> // cannot be under 250milli.
> int latch = 0;
> - long l = System.currentTimeMillis() + 250;
> - while (System.currentTimeMillis() < l) {
> + long l = System.nanoTime();
> + while (System.nanoTime() - l < 250000000) {
> synchronized(this){};
> latch++;
> }
>
> Thanks
> Max
>
>>
>> On 06/15/2016 05:30 PM, Bradford Wetmore wrote:
>>> Looks good, Max, thanks for taking this over.
>>>
>>> Xuelei, it's a threaded accumulator, which feeds into the seed
>>> generator. We wait a certain amount of time before generating the values.
>>>
>>> Brad
>>>
>>>
>>> On 6/15/2016 5:07 AM, Xuelei Fan wrote:
>>>> I'm not sure I understand the while loop. But this update looks fine to
>>>> me as it does not change the logic of the code except to use elapsed
>>>> time.
>>>>
>>>> Xuelei
>>>>
>>>> On 6/15/2016 11:12 AM, Wang Weijun wrote:
>>>>> Please take a review on the patch
>>>>>
>>>>> diff --git
>>>>> a/src/java.base/share/classes/sun/security/provider/SeedGenerator.java b/src/java.base/share/classes/sun/security/provider/SeedGenerator.java
>>>>>
>>>>> ---
>>>>> a/src/java.base/share/classes/sun/security/provider/SeedGenerator.java
>>>>> +++
>>>>> b/src/java.base/share/classes/sun/security/provider/SeedGenerator.java
>>>>> @@ -354,8 +354,8 @@
>>>>> // We wait 250milli quanta, so the minimum
>>>>> wait time
>>>>> // cannot be under 250milli.
>>>>> int latch = 0;
>>>>> - long l = System.currentTimeMillis() + 250;
>>>>> - while (System.currentTimeMillis() < l) {
>>>>> + long l = System.nanoTime() + 250000000;
>>>>> + while (System.nanoTime() < l) {
>>>>> synchronized(this){};
>>>>> latch++;
>>>>> }
>>>>>
>>>>> nanoTime() is for elapsed time and should be used here.
>>>>>
>>>>> Thanks
>>>>> Max
>>>>>
>>>>
>>
>> --
>> - DML
>
More information about the security-dev
mailing list