Hi Xuelei, and Ivan who replied in another mail,

> On Nov 29, 2018, at 4:31 AM, Xue-Lei Fan <xuelei....@oracle.com> wrote:
> 
> Do you know, is there any other way except Cleaner and finalize() to clean up 
> the allocated resources?

I don't know any other automatic mechanisms. There is AutoClosable but 
SecureRandom has not implemented it and we cannot expect people using 
try-with-resources on it.

> 
> I'm not very sure of the use of static Cleaner:
> 1. a daemon thread will run underlying.
> 2. the number of registered actions could be huge in some circumstances.

Anyway, I think any fix that reuses the context is to change a time performance 
issue into a resource performance issue because we cannot precisely control the 
resource cleanup.

I don't have enough data on how often people use Windows-PRNG, how many objects 
they create, how many nextBytes they call on a single object, and how they use 
it in multiple threads. So it's quite clueless to determine which solution is 
the best.

Both this bug and the previous one (JDK-6449335) are not reported by external 
customers. Therefore I prefer retargeting the bug to the next release and 
problem list the test at the moment. In the last 1700 mach5 jobs with this 
test, there were 4 timeouts.

Thanks
Max

p.s. We might reimplement using CNG but CNG also has its own problem (no easy 
way to implement setSeed).

> 
> I'm not very sure if it could be a scalability bottleneck or not.
> 
> Xuelei
> 
> 
> On 11/26/2018 5:33 PM, Weijun Wang wrote:
>> Ping again
>>> On Nov 20, 2018, at 5:33 PM, Weijun Wang <weijun.w...@oracle.com> wrote:
>>> 
>>> Webrev updated at
>>> 
>>>   https://cr.openjdk.java.net/~weijun/8210476/webrev.01/
>>> 
>>> The only change is that there is a single Cleaner now for the whole PRNG 
>>> class. Otherwise, each will maintain its own thread.
>>> 
>>> Thanks
>>> Max
>>> 
>>>> On Nov 11, 2018, at 11:30 PM, Weijun Wang <weijun.w...@oracle.com> wrote:
>>>> 
>>>> Please take a review at
>>>> 
>>>>  https://cr.openjdk.java.net/~weijun/8210476/webrev.00/
>>>> 
>>>> Before this fix, every PRNG::nextBytes calls all of CryptAcquireContext, 
>>>> CryptGenRandom, and CryptReleaseContext. Now, CryptAcquireContext is 
>>>> called once in PRNG::new, and CryptReleaseContext is called by a Cleaner, 
>>>> and nextBytes only calls CryptGenRandom.
>>>> 
>>>> I haven't read about thread-safety in any MS document, the current 
>>>> Windows-PRNG service is marked ThreadSafe=true (in SunMSCAPI.java). If we 
>>>> cannot be really sure, we can change it to false.
>>>> 
>>>> I've downloaded nearly 1000 Mach5 runs of this test, the enhancement is so 
>>>> good that I adjusted the test to be stricter.
>>>> 
>>>>    Before  After
>>>>    ------  -----
>>>> Count      897     74
>>>> Min        0.38    0.008
>>>> Ave        0.97    0.011
>>>> Max        5.81    0.021
>>>> 
>>>> Please advise me if the following usage of Cleaner is correct because I 
>>>> really haven't observed the releaseContext method being called.
>>>> 
>>>> +        Cleaner.create().register(this,
>>>> +                () -> releaseContext(ctxt));
>>>> 
>>>> Thanks
>>>> Max
>>>> 
>>> 

Reply via email to