diff options
author | Jozef Gajdos <jozef.gajdos@disig.sk> | 2023-02-17 07:52:10 +0100 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2023-02-17 17:33:28 +0700 |
commit | 31bfe2eb4ca09c38801dbf6260d148abbbebbae1 (patch) | |
tree | e318def1c9c28ee4b5f0585d8b40269594d608a3 | |
parent | AEAD refactoring (diff) | |
download | BouncyCastle.NET-ed25519-31bfe2eb4ca09c38801dbf6260d148abbbebbae1.tar.xz |
Removing unnecessary locks in X509Certificate and X509Crl
-rw-r--r-- | crypto/src/x509/X509Certificate.cs | 40 | ||||
-rw-r--r-- | crypto/src/x509/X509Crl.cs | 22 |
2 files changed, 17 insertions, 45 deletions
diff --git a/crypto/src/x509/X509Certificate.cs b/crypto/src/x509/X509Certificate.cs index e69aca1ce..aec793731 100644 --- a/crypto/src/x509/X509Certificate.cs +++ b/crypto/src/x509/X509Certificate.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Net; using System.Text; +using System.Threading; using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Asn1.Misc; @@ -63,7 +64,6 @@ namespace Org.BouncyCastle.X509 private readonly BasicConstraints basicConstraints; private readonly bool[] keyUsage; - private readonly object cacheLock = new object(); private AsymmetricKeyParameter publicKeyValue; private CachedEncoding cachedEncoding; @@ -471,23 +471,14 @@ namespace Org.BouncyCastle.X509 public virtual AsymmetricKeyParameter GetPublicKey() { // Cache the public key to support repeated-use optimizations - lock (cacheLock) - { - if (null != publicKeyValue) - return publicKeyValue; - } + AsymmetricKeyParameter localPublicKeyValue = publicKeyValue; + if (null != localPublicKeyValue) + return localPublicKeyValue; AsymmetricKeyParameter temp = PublicKeyFactory.CreateKey(c.SubjectPublicKeyInfo); - lock (cacheLock) - { - if (null == publicKeyValue) - { - publicKeyValue = temp; - } - - return publicKeyValue; - } + Interlocked.CompareExchange(ref publicKeyValue, temp, null); + return publicKeyValue; } /// <summary> @@ -691,11 +682,9 @@ namespace Org.BouncyCastle.X509 private CachedEncoding GetCachedEncoding() { - lock (cacheLock) - { - if (null != cachedEncoding) - return cachedEncoding; - } + CachedEncoding localCachedEncoding = cachedEncoding; + if (null != localCachedEncoding) + return localCachedEncoding; byte[] encoding = null; CertificateEncodingException exception = null; @@ -710,15 +699,8 @@ namespace Org.BouncyCastle.X509 CachedEncoding temp = new CachedEncoding(encoding, exception); - lock (cacheLock) - { - if (null == cachedEncoding) - { - cachedEncoding = temp; - } - - return cachedEncoding; - } + Interlocked.CompareExchange(ref cachedEncoding, temp, null); + return cachedEncoding; } private static bool IsAlgIDEqual(AlgorithmIdentifier id1, AlgorithmIdentifier id2) diff --git a/crypto/src/x509/X509Crl.cs b/crypto/src/x509/X509Crl.cs index 3780d277a..e47addd7a 100644 --- a/crypto/src/x509/X509Crl.cs +++ b/crypto/src/x509/X509Crl.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Text; - +using System.Threading; using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Asn1.Utilities; using Org.BouncyCastle.Asn1.X509; @@ -63,7 +63,6 @@ namespace Org.BouncyCastle.X509 private readonly byte[] sigAlgParams; private readonly bool isIndirect; - private readonly object cacheLock = new object(); private CachedEncoding cachedEncoding; private volatile bool hashValueSet; @@ -450,11 +449,9 @@ namespace Org.BouncyCastle.X509 private CachedEncoding GetCachedEncoding() { - lock (cacheLock) - { - if (null != cachedEncoding) - return cachedEncoding; - } + CachedEncoding localCacheEncoding = cachedEncoding; + if (null != localCacheEncoding) + return localCacheEncoding; byte[] encoding = null; CrlException exception = null; @@ -469,15 +466,8 @@ namespace Org.BouncyCastle.X509 CachedEncoding temp = new CachedEncoding(encoding, exception); - lock (cacheLock) - { - if (null == cachedEncoding) - { - cachedEncoding = temp; - } - - return cachedEncoding; - } + Interlocked.CompareExchange(ref cachedEncoding, temp, null); + return cachedEncoding; } } } |