128 was a cap on concurrent logins, not a resource bound. 800 people picking a server at once overflowed it and the oldest live ids were thrown away, so the clients holding them arrived to "unable to find auth id" and a disconnect -- for no reason other than that other people were also logging in. The window now grows with real demand and only sweeps ids that have expired. That is safe to leave unbounded: an entry costs a successful password verify to create and dies after two minutes, so its size tracks logins actually in flight. Corrects the previous commit's reasoning as well. An id is created by picking a server, not by reaching the server list, so a player who idles on the list has no id to abandon. The ones left behind belong to clients that picked a server and never arrived, which is a seconds-wide window. Removing an id when its connection drops is not an option: the server itself disconnects the login connection immediately after issuing one, so surviving that disconnect is the whole point. Expiry is the only correct reclamation. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| Application | ||
| BuildTool | ||
| Logger | ||
| Server | ||
| Server.Tests | ||
| UOContent | ||
| UOContent.Tests | ||