Load single certificates directly from the KeyStore if we cannot get the read lock

This helps when running in the emulator as loading the certificates
takes quite a while there.  This way a configured CA certificates is loaded
directly without having to wait for all certificates being cached.
This commit is contained in:
Tobias Brunner
2012-08-13 11:22:19 +02:00
parent c0fe43f002
commit 496e096e7b
@@ -147,9 +147,32 @@ public class TrustedCertificateManager
*/
public X509Certificate getCACertificateFromAlias(String alias)
{
this.mLock.readLock().lock();
X509Certificate certificate = this.mCACerts.get(alias);
this.mLock.readLock().unlock();
X509Certificate certificate = null;
if (this.mLock.readLock().tryLock())
{
certificate = this.mCACerts.get(alias);
this.mLock.readLock().unlock();
}
else
{ /* if we cannot get the lock load it directly from the KeyStore,
* should be fast for a single certificate */
try
{
KeyStore store = KeyStore.getInstance("AndroidCAStore");
store.load(null, null);
Certificate cert = store.getCertificate(alias);
if (cert != null && cert instanceof X509Certificate)
{
certificate = (X509Certificate)cert;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
return certificate;
}