13
0
geforkt von Mirrors/Velocity

Fix rare race condition with transitioning

If the player unexpectedly disconnects after ServerConnectEvent is
fired, but before the connection transitions to the new player, Velocity
would throw an exception thinking the connection was not present. This
is the correct behavior, but the behavior is very surprising. Instead we
will double-check to ensure the connection has not been lost before we
continue with transitioning to the new server.
Dieser Commit ist enthalten in:
Andrew Steinborn 2020-04-19 03:39:15 -04:00
Ursprung 187a625aa4
Commit bb129a3d0b

Datei anzeigen

@ -82,6 +82,13 @@ public class TransitionSessionHandler implements MinecraftSessionHandler {
server.getEventManager() server.getEventManager()
.fire(new ServerConnectedEvent(serverConn.getPlayer(), serverConn.getServer())) .fire(new ServerConnectedEvent(serverConn.getPlayer(), serverConn.getServer()))
.whenCompleteAsync((x, error) -> { .whenCompleteAsync((x, error) -> {
// Make sure we can still transition (player might have disconnected here).
if (!serverConn.isActive()) {
// Connection is obsolete.
serverConn.disconnect();
return;
}
// Strap on the ClientPlaySessionHandler if required. // Strap on the ClientPlaySessionHandler if required.
ClientPlaySessionHandler playHandler; ClientPlaySessionHandler playHandler;
if (serverConn.getPlayer().getMinecraftConnection().getSessionHandler() if (serverConn.getPlayer().getMinecraftConnection().getSessionHandler()