Record direct Uranium login isolation check

This commit is contained in:
layue13 committed 2026-09-26 03:52:38 +08:00
1 parent db520df97f
commit b70dd6965c
1 file changed
+2
@@ -13,3 +13,5 @@ Date: 2026-09-26 (Asia/Shanghai). The installed StrataProxy plugin smoke used tw
In Uranium's `NetworkSystem.addLanEndpoint`, `networkManagers.add(networkmanager)` runs inside the Netty channel initializer, before the manager is added to the pipeline and before `NetworkManager.channelActive` assigns its `channel`. Concurrently, `NetworkSystem.networkTick` removes any manager for which `isChannelOpen()` is false; that method returns false while `channel` is null. The tick can therefore remove a newly accepted manager before it becomes active. `C00Handshake.hasPriority()` is true, so the handshake can still be handled on Netty I/O, while Login Start is queued for `processReceivedPackets()` on the server tick. If the manager has already been removed from the tick list, Login Start can wait indefinitely without a `Login attempt` line. `NetHandlerHandshakeTCP.onDisconnect` is empty, so an early close may also leave no player-specific log.
This interleaving matches both observed stalls, but no failing run directly recorded removal of a manager before `channelActive`. It is a hypothesis, not a proven root cause. The next discriminating check is a disposable Uranium build that records manager registration, activation, and removal by connection, or registers the manager only after activation and compares repeated runs under the same smoke conditions.
An isolation check bypassed StrataProxy and sent protocol-5 Handshake and Login Start directly to one fresh Uranium process 50 times (`build/direct-uranium-7e2025db389e4ef6bc6e6dcacf8aa2c8`). All 50 received Login Success, and Uranium logged 50 `Login attempt` lines. This shows the backend can process the same basic protocol without the proxy; it does not rule out a timing-sensitive Uranium race or identify a proxy-specific defect. The temporary client script and server logs remain in ignored `build/` directories.