Commit a863fd15 authored by justcoding121's avatar justcoding121

fix lock issues causing memory violation

parent 3b8ae98b
......@@ -16,9 +16,7 @@ namespace Titanium.Web.Proxy.Examples.Basic
public class ProxyTestController
{
private readonly SemaphoreSlim @lock = new SemaphoreSlim(1);
private readonly ProxyServer proxyServer;
private ExplicitProxyEndPoint explicitEndPoint;
public ProxyTestController()
......@@ -32,27 +30,13 @@ namespace Titanium.Web.Proxy.Examples.Basic
proxyServer.ExceptionFunc = async exception =>
{
await @lock.WaitAsync();
try
if (exception is ProxyHttpException phex)
{
var color = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Red;
if (exception is ProxyHttpException phex)
{
Console.WriteLine(exception.Message + ": " + phex.InnerException?.Message);
}
else
{
Console.WriteLine(exception.Message);
}
Console.ForegroundColor = color;
await WriteToConsole(exception.Message + ": " + phex.InnerException?.Message, ConsoleColor.Red);
}
finally
else
{
@lock.Release();
await WriteToConsole(exception.Message, ConsoleColor.Red);
}
};
proxyServer.ForwardToUpstreamGateway = true;
......@@ -110,7 +94,7 @@ namespace Titanium.Web.Proxy.Examples.Basic
// Only explicit proxies can be set as system proxy!
//proxyServer.SetAsSystemHttpProxy(explicitEndPoint);
//proxyServer.SetAsSystemHttpsProxy(explicitEndPoint);
if(RunTime.IsWindows)
if (RunTime.IsWindows)
{
proxyServer.SetAsSystemProxy(explicitEndPoint, ProxyProtocolType.AllHttp);
}
......@@ -281,6 +265,24 @@ namespace Titanium.Web.Proxy.Examples.Basic
{
await @lock.WaitAsync();
ConsoleColor color;
try
{
color = Console.ForegroundColor;
}
finally
{
@lock.Release();
}
await WriteToConsole(message, color);
}
private async Task WriteToConsole(string message, ConsoleColor color)
{
await @lock.WaitAsync();
try
{
Console.WriteLine(message);
......@@ -289,6 +291,7 @@ namespace Titanium.Web.Proxy.Examples.Basic
{
@lock.Release();
}
}
///// <summary>
......
......@@ -60,7 +60,7 @@ namespace Titanium.Web.Proxy.Network
private X509Certificate2 rootCertificate;
private string rootCertificateName;
/// <summary>
/// Initializes a new instance of the <see cref="CertificateManager"/> class.
/// </summary>
......@@ -242,7 +242,7 @@ namespace Titanium.Web.Proxy.Network
public void Dispose()
{
}
private string getRootCertificateDirectory()
{
string assemblyLocation = Assembly.GetExecutingAssembly().Location;
......@@ -427,17 +427,16 @@ namespace Titanium.Web.Proxy.Network
certificate = makeCertificate(certificateName, false);
// store as cache
Task.Run(() =>
try
{
var exported = certificate.Export(X509ContentType.Pkcs12);
File.WriteAllBytes(certificatePath, exported);
}
catch (Exception e)
{
try
{
File.WriteAllBytes(certificatePath, certificate.Export(X509ContentType.Pkcs12));
}
catch (Exception e)
{
ExceptionFunc(new Exception("Failed to save fake certificate.", e));
}
});
ExceptionFunc(new Exception("Failed to save fake certificate.", e));
}
}
else
{
......@@ -530,7 +529,7 @@ namespace Titanium.Web.Proxy.Network
await Task.Delay(1000 * 60);
}
}
/// <summary>
/// Stops the certificate cache clear process
/// </summary>
......@@ -776,7 +775,7 @@ namespace Titanium.Web.Proxy.Network
EnsureRootCertificate();
}
/// <summary>
/// Determines whether the root certificate is trusted.
/// </summary>
......
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