From 851c2b19e31527f7b758f9c924290ad0c950849d Mon Sep 17 00:00:00 2001 From: Tux Date: Sun, 20 Mar 2016 01:36:23 -0400 Subject: [PATCH] Better race condition check for disconnect() diff --git a/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java b/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java index 0b1be45..9ced50c 100644 --- a/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java +++ b/proxy/src/main/java/net/md_5/bungee/connection/InitialHandler.java @@ -8,6 +8,7 @@ import java.net.URLEncoder; import java.security.MessageDigest; import java.util.List; import java.util.UUID; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; import javax.crypto.SecretKey; import com.google.gson.Gson; @@ -96,12 +97,11 @@ public class InitialHandler extends PacketHandler implements PendingConnection private boolean legacy; @Getter private String extraDataInHandshake = ""; - private boolean disconnecting; + private final AtomicBoolean disconnecting = new AtomicBoolean(false); - @Override public boolean shouldHandle(PacketWrapper packet) throws Exception { - return !disconnecting; + return !disconnecting.get(); } private enum State @@ -532,9 +532,8 @@ public class InitialHandler extends PacketHandler implements PendingConnection @Override public void disconnect(final BaseComponent... reason) { - if ( !disconnecting || !ch.isClosed() ) + if ( disconnecting.compareAndSet(false, true) || !ch.isClosed() ) { - disconnecting = true; if ( thisState != State.STATUS && thisState != State.PING ) { ch.close( new Kick( ComponentSerializer.toString( reason ) ) ); } else { -- 2.8.3