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 ...@@ -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) X509Certificate2Collection certificates;
{
certificates = FindCertificates(store, certificateSubject);
if (certificates != null) if (isRootCertificate)
{ {
certificate = certificates[0]; 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) }; GetCertificateCreateArgs(store, certificateName) };
await semaphoreLock.WaitAsync();
try
{
await CreateCertificate(args); 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(); //remove it from store
if (!isRootCertificate)
if (certificate != null && !certificateCache.ContainsKey(certificateName))
{ {
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> /// <summary>
...@@ -270,7 +273,7 @@ namespace Titanium.Web.Proxy.Network ...@@ -270,7 +273,7 @@ namespace Titanium.Web.Proxy.Network
return certCreatArgs; return certCreatArgs;
} }
private bool clearCertificates { get; set; } private bool clearCertificates { get; set; }
/// <summary> /// <summary>
/// Stops the certificate cache clear process /// Stops the certificate cache clear process
...@@ -301,7 +304,8 @@ namespace Titanium.Web.Proxy.Network ...@@ -301,7 +304,8 @@ namespace Titanium.Web.Proxy.Network
foreach (var cache in outdated) foreach (var cache in outdated)
certificateCache.Remove(cache.Key); certificateCache.Remove(cache.Key);
} }
finally { finally
{
semaphoreLock.Release(); 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