>> Is it possible that the exception is thrown sometimes but not always?

If it always fails, there is no problem failing once at the beginning. Otherwise, if there is a chance it goes fine again after calling some codes, maybe it's better to try call it each time?

Max

On 11/27/2011 09:05 AM, Xuelei Fan wrote:


Sent from my iPad

On Nov 27, 2011, at 12:23 AM, Weijun Wang<weijun.w...@oracle.com>  wrote:

There is one thing I'm not sure about:

In which case(s), the GeneralSecurityException will be thrown?
SSLContext initialization.

Is it possible that the exception is thrown sometimes but not always? Also, the 
old code has the exception as a clause of the CertStoreException. Can you also 
include it?

It is reorged in line 100 and 101, the cause is described as unable to 
initialize the ssl context.

Xuelei

Max



On Nov 26, 2011, at 11:25 PM, Xuelei Fan<xuelei....@oracle.com>  wrote:

new webrev: http://cr.openjdk.java.net/~xuelei/7115524/webrev.01/

You're right on the synchronization issue. In the new webrev, I also
remove the "synchronized" keyword on method. Instead, a synchronization
on the static attribute is used.

Thanks,
Xuelei

On 11/26/2011 11:16 PM, Weijun Wang wrote:

On Nov 26, 2011, at 10:58 PM, Xuelei Fan<xuelei....@oracle.com>  wrote:

I was wondering why we synchronized the getInstance() and
engineGetCertificates(). It seems that we only need to synchronize the
serverChain variable.

I will update the synchronization if no objection.

Thanks,
Xuelei

On 11/26/2011 10:42 PM, Xuelei Fan wrote:
On 11/26/2011 9:59 PM, Weijun Wang wrote:
Hi Xuelei

Why move the local variables to static fields?

In order to improve the performance. SSLContext.init() is expensive.

The engineGetCertificates method is only synchronized on this but not the whole 
class, so there is a chance that the method is called by multiple threads at 
the same time. This means if you only use one static GetChainTrustManager 
field, its serverChain field can be modified by different threads.

We have synchronized the engineGetCertificates(), and this method is the
only method to access the GetChainTrustManager object. As the attribute
is declared as "final static", so it will be initialized once even in
multiple threads.

But this method is only synchronized on the instance, not the class. You can 
create two SSLServerCertStore objects can call this method at the same time.

Max


That's, the access to serverChain variable has been synchronized by
synchronizing the engineGetCertificates method.

Xuelei

-Max

On Nov 26, 2011, at 8:43 PM, Xuelei Fan wrote:

webrev: http://cr.openjdk.java.net/~xuelei/7115524/webrev.00/

No new regression test, the current test,
test/sun/security/tools/keytool/printssl.sh, has already been able to
test the update.

Thanks,
Xuelei




Reply via email to