Commit 2f2a3b2f authored by ilushka85's avatar ilushka85

reduce area of which semaphore is locked

parent 204c4da6
......@@ -108,59 +108,62 @@ namespace Titanium.Web.Proxy.Network
}
await semaphoreLock.WaitAsync();
try
{
X509Certificate2 certificate = null;
store.Open(OpenFlags.ReadWrite);
string certificateSubject = string.Format("CN={0}, O={1}", certificateName, Issuer);
X509Certificate2Collection certificates;
X509Certificate2 certificate = null;
store.Open(OpenFlags.ReadWrite);
string certificateSubject = string.Format("CN={0}, O={1}", certificateName, Issuer);
if (isRootCertificate)
{
certificates = FindCertificates(store, certificateSubject);
X509Certificate2Collection certificates;
if (certificates != null)
{
certificate = certificates[0];
}
}
if (isRootCertificate)
{
certificates = FindCertificates(store, certificateSubject);
if (certificate == null)
if (certificates != null)
{
string[] args = new[] {
certificate = certificates[0];
}
}
if (certificate == null)
{
string[] args = new[] {
GetCertificateCreateArgs(store, certificateName) };
await semaphoreLock.WaitAsync();
try
{
await CreateCertificate(args);
certificates = FindCertificates(store, certificateSubject);
//remove it from store
if (!isRootCertificate)
{
DestroyCertificate(certificateName);
}
if (certificates != null)
{
certificate = certificates[0];
}
}
finally
{
semaphoreLock.Release();
}
certificates = FindCertificates(store, certificateSubject);
store.Close();
if (certificate != null && !certificateCache.ContainsKey(certificateName))
//remove it from store
if (!isRootCertificate)
{
certificateCache.Add(certificateName, new CachedCertificate() { Certificate = certificate });
DestroyCertificate(certificateName);
}
return certificate;
if (certificates != null)
{
certificate = certificates[0];
}
}
finally
store.Close();
if (certificate != null && !certificateCache.ContainsKey(certificateName))
{
semaphoreLock.Release();
certificateCache.Add(certificateName, new CachedCertificate() { Certificate = certificate });
}
return certificate;
}
/// <summary>
......@@ -270,7 +273,7 @@ namespace Titanium.Web.Proxy.Network
return certCreatArgs;
}
private bool clearCertificates { get; set; }
private bool clearCertificates { get; set; }
/// <summary>
/// Stops the certificate cache clear process
......@@ -301,7 +304,8 @@ namespace Titanium.Web.Proxy.Network
foreach (var cache in outdated)
certificateCache.Remove(cache.Key);
}
finally {
finally
{
semaphoreLock.Release();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment