ReHamster / AlcatrazServer

Driver San Francisco experimental Online backend
http://alcatraz.drivermadness.net
13 stars 2 forks source link

CRITICAL: NetworkPlayers.DropPlayers function leaks Players sessions. #17

Open GitHubProUser67 opened 5 months ago

GitHubProUser67 commented 5 months ago

The function: NetworkPlayers.DropPlayers has a bug where player sessions are being leaked in memory over time due to silent failing.

On my fork, I solved the issue by locking a removal instance like this:

private static object lockObject = new();

public static void DropPlayers() { lock (lockObject) // Prevents the same action being done multiple times if the loop is very tight. { Players.RemoveAll(playerInfo => { if (playerInfo.Client?.State != QClient.StateType.Dropped) return false; if (playerInfo.Client.TimeSinceLastPacket < Constants.ClientTimeoutSeconds) return false; LoggerAccessor.LogWarn($"[Quazal NetworkPlayers] - auto-dropping player: {playerInfo.Name}"); if (playerInfo.Client != null) playerInfo.Client.PlayerInfo = null; playerInfo.OnDropped(); return true; }); } }

This bug will prevent ghost players being returned as game start.