Fix. Call EndGame in one place of server main loop. Ensure UPnP port forward is removed always. 18807.
This commit is contained in:
@@ -274,41 +274,38 @@ namespace OpenRA.Server
|
|||||||
if (checkRead.Count > 0)
|
if (checkRead.Count > 0)
|
||||||
Socket.Select(checkRead, null, null, localTimeout);
|
Socket.Select(checkRead, null, null, localTimeout);
|
||||||
|
|
||||||
if (State == ServerState.ShuttingDown)
|
if (State != ServerState.ShuttingDown)
|
||||||
{
|
{
|
||||||
EndGame();
|
foreach (var s in checkRead)
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var s in checkRead)
|
|
||||||
{
|
|
||||||
var serverIndex = checkReadServer.IndexOf(s);
|
|
||||||
if (serverIndex >= 0)
|
|
||||||
{
|
{
|
||||||
AcceptConnection(listeners[serverIndex]);
|
var serverIndex = checkReadServer.IndexOf(s);
|
||||||
continue;
|
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);
|
delayedActions.PerformActions(0);
|
||||||
if (preConn != null)
|
|
||||||
{
|
|
||||||
preConn.ReadData(this);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var conn = Conns.SingleOrDefault(c => c.Socket == s);
|
// PERF: Dedicated servers need to drain the action queue to remove references blocking the GC from cleaning up disposed objects.
|
||||||
conn?.ReadData(this);
|
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)
|
if (State == ServerState.ShuttingDown)
|
||||||
{
|
{
|
||||||
EndGame();
|
EndGame();
|
||||||
|
|||||||
Reference in New Issue
Block a user