未验证 提交 79874806 编写于 作者: M Marie Píchová 提交者: GitHub

[QUIC] Fixed Assert (#72022)

上级 89ea1397
......@@ -47,6 +47,7 @@ internal sealed class State
// These exists to prevent GC of the MsQuicConnection in the middle of an async op (Connect or Shutdown).
public MsQuicConnection? Connection;
public bool ShutdownInProgress;
public readonly ValueTaskSource ConnectTcs = new ValueTaskSource();
// TODO: only allocate these when there is an outstanding shutdown.
......@@ -215,7 +216,10 @@ private static unsafe int HandleEventConnected(State state, ref QUIC_CONNECTION_
//state.Connection._remoteEndPoint = MsQuicParameterHelpers.GetIPEndPointParam(MsQuicApi.Api, state.Handle, QUIC_PARAM_CONN_REMOTE_ADDRESS);
state.Connection._localEndPoint = MsQuicParameterHelpers.GetIPEndPointParam(MsQuicApi.Api, state.Handle, QUIC_PARAM_CONN_LOCAL_ADDRESS);
state.Connection._negotiatedAlpnProtocol = new SslApplicationProtocol(new Span<byte>(connectionEvent.CONNECTED.NegotiatedAlpn, connectionEvent.CONNECTED.NegotiatedAlpnLength).ToArray());
state.Connection = null;
if (!state.ShutdownInProgress)
{
state.Connection = null;
}
state.ConnectTcs.TrySetResult();
......@@ -227,7 +231,10 @@ private static int HandleEventShutdownInitiatedByTransport(State state, ref QUIC
if (!state.ConnectTcs.IsCompleted)
{
Debug.Assert(state.Connection != null);
state.Connection = null;
if (!state.ShutdownInProgress)
{
state.Connection = null;
}
state.ConnectTcs.TrySetException(new MsQuicException(connectionEvent.SHUTDOWN_INITIATED_BY_TRANSPORT.Status, "Connection has been shutdown by transport"));
}
......@@ -254,6 +261,7 @@ private static int HandleEventShutdownComplete(State state, ref QUIC_CONNECTION_
state.StateGCHandle.Free();
state.Connection = null;
state.ShutdownInProgress = false;
state.ShutdownTcs.SetResult(QUIC_STATUS_SUCCESS);
......@@ -595,7 +603,7 @@ internal unsafe ValueTask FinishHandshakeAsync(QuicServerConnectionOptions optio
long ErrorCode)
{
// Store the connection into the GCHandle'd state to prevent GC if user calls ShutdownAsync and gets rid of all references to the MsQuicConnection.
Debug.Assert(_state.Connection == null);
_state.ShutdownInProgress = true;
_state.Connection = this;
try
......@@ -608,6 +616,7 @@ internal unsafe ValueTask FinishHandshakeAsync(QuicServerConnectionOptions optio
}
catch
{
_state.ShutdownInProgress = false;
_state.Connection = null;
throw;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册