Handle disposing of debugger server

This commit is contained in:
Yoshi Askharoun
2023-06-01 20:36:32 -05:00
parent 3539ed4826
commit 4ce9c51d9c
2 changed files with 12 additions and 2 deletions
+5 -1
View File
@@ -195,7 +195,7 @@ namespace Microsoft.Iris
if (DebugSettings.DebugConnectionUri != null)
{
Debugger = new Debug.NetMQ.ZmqDebuggerServer(DebugSettings.DebugConnectionUri);
Debugger = new Debug.SystemNet.NetDebuggerServer(DebugSettings.DebugConnectionUri);
DebuggerServerReady?.Invoke(Debugger, EventArgs.Empty);
}
@@ -309,7 +309,11 @@ namespace Microsoft.Iris
if (s_initializationState == InitializationState.InitializedWithoutUI)
RenderApi.ShutdownForToolOnly();
StaticServices.Uninitialize();
Debug.Trace.Shutdown();
if (Debugger is IDisposable disposable)
disposable.Dispose();
ErrorManager.OnErrors -= new NotifyErrorBatch(NotifyErrorBatchHandler);
s_initializationState = InitializationState.NotInitialized;
}
@@ -19,6 +19,7 @@ internal class NetDebuggerServer : IDebuggerServer, IDisposable
private readonly TcpListener _listener;
private readonly IFormatter _formatter;
private Socket _socket;
private bool _disposed = false;
public NetDebuggerServer(string connectionUri) : this(new Uri(connectionUri))
{
@@ -54,6 +55,10 @@ internal class NetDebuggerServer : IDebuggerServer, IDisposable
public void Dispose()
{
if (_disposed)
return;
_disposed = true;
_listener.Stop();
_socket?.Dispose();
}
@@ -94,7 +99,8 @@ internal class NetDebuggerServer : IDebuggerServer, IDisposable
private void ConnectLoop()
{
while (!_listener.Pending()) ;
while (!_listener.Pending())
if (_disposed) return;
_socket = _listener.AcceptSocket();