Fix. Call EndGame in one place of server main loop. Ensure UPnP port forward is removed always. 18807.

This commit is contained in:
Vapre
2021-01-09 17:19:47 +01:00
committed by Paul Chote
parent e7cfd2765c
commit f176a0ed83

View File

@@ -274,41 +274,38 @@ namespace OpenRA.Server
if (checkRead.Count > 0)
Socket.Select(checkRead, null, null, localTimeout);
if (State == ServerState.ShuttingDown)
if (State != ServerState.ShuttingDown)
{
EndGame();
break;
}
foreach (var s in checkRead)
{
var serverIndex = checkReadServer.IndexOf(s);
if (serverIndex >= 0)
foreach (var s in checkRead)
{
AcceptConnection(listeners[serverIndex]);
continue;
var serverIndex = checkReadServer.IndexOf(s);
if (serverIndex >= 0)
{
AcceptConnection(listeners[serverIndex]);
continue;
}
var preConn = PreConns.SingleOrDefault(c => c.Socket == s);
if (preConn != null)
{
preConn.ReadData(this);
continue;
}
var conn = Conns.SingleOrDefault(c => c.Socket == s);
conn?.ReadData(this);
}
var preConn = PreConns.SingleOrDefault(c => c.Socket == s);
if (preConn != null)
{
preConn.ReadData(this);
continue;
}
delayedActions.PerformActions(0);
var conn = Conns.SingleOrDefault(c => c.Socket == s);
conn?.ReadData(this);
// PERF: Dedicated servers need to drain the action queue to remove references blocking the GC from cleaning up disposed objects.
if (Type == ServerType.Dedicated)
Game.PerformDelayedActions();
foreach (var t in serverTraits.WithInterface<ITick>())
t.Tick(this);
}
delayedActions.PerformActions(0);
// PERF: Dedicated servers need to drain the action queue to remove references blocking the GC from cleaning up disposed objects.
if (Type == ServerType.Dedicated)
Game.PerformDelayedActions();
foreach (var t in serverTraits.WithInterface<ITick>())
t.Tick(this);
if (State == ServerState.ShuttingDown)
{
EndGame();