mirror of
https://github.com/PaperMC/Waterfall.git
synced 2024-10-04 17:37:27 +02:00
c6ee5b53a7
Closes #8 even more
48 lines
1.8 KiB
Diff
48 lines
1.8 KiB
Diff
From 1f1df09244b1fe1746f9d48b000d2c54d86f64dc Mon Sep 17 00:00:00 2001
|
|
From: Tux <write@imaginarycode.com>
|
|
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 b27b447..13a549a 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
|
|
|