54 lines
2.8 KiB
Diff
54 lines
2.8 KiB
Diff
|
From 63cb64b4b71712e3c54af86ce92c7c7c428b8769 Mon Sep 17 00:00:00 2001
|
||
|
From: Poweruser <poweruser.rs@hotmail.com>
|
||
|
Date: Sun, 12 Jun 2016 03:41:51 +0200
|
||
|
Subject: [PATCH] Pull in a PaperSpigot patch to avoid blocking netty
|
||
|
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/ServerConnection.java b/src/main/java/net/minecraft/server/ServerConnection.java
|
||
|
index 981e22cc3..7afe17b43 100644
|
||
|
--- a/src/main/java/net/minecraft/server/ServerConnection.java
|
||
|
+++ b/src/main/java/net/minecraft/server/ServerConnection.java
|
||
|
@@ -25,6 +25,18 @@ public class ServerConnection {
|
||
|
private final List e = Collections.synchronizedList(new ArrayList());
|
||
|
private final List f = Collections.synchronizedList(new ArrayList());
|
||
|
|
||
|
+ // Paper start - prevent blocking on adding a new network manager while the server is ticking
|
||
|
+ protected final List<NetworkManager> pending = Collections.synchronizedList(new ArrayList<NetworkManager>());
|
||
|
+ private void addPending() {
|
||
|
+ synchronized (pending) {
|
||
|
+ synchronized (this.f) {
|
||
|
+ this.f.addAll(pending);
|
||
|
+ pending.clear();
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+ // Paper end
|
||
|
+
|
||
|
public ServerConnection(MinecraftServer minecraftserver) {
|
||
|
this.d = minecraftserver;
|
||
|
this.a = true;
|
||
|
@@ -53,6 +65,7 @@ public class ServerConnection {
|
||
|
List list = this.f;
|
||
|
|
||
|
synchronized (this.f) {
|
||
|
+ addPending(); // Paper
|
||
|
// Spigot Start
|
||
|
// This prevents players from 'gaming' the server, and strategically relogging to increase their position in the tick order
|
||
|
if ( org.spigotmc.SpigotConfig.playerShuffle > 0 && MinecraftServer.currentTick % org.spigotmc.SpigotConfig.playerShuffle == 0 )
|
||
|
diff --git a/src/main/java/net/minecraft/server/ServerConnectionChannel.java b/src/main/java/net/minecraft/server/ServerConnectionChannel.java
|
||
|
index d7d93a07c..9058aab5a 100644
|
||
|
--- a/src/main/java/net/minecraft/server/ServerConnectionChannel.java
|
||
|
+++ b/src/main/java/net/minecraft/server/ServerConnectionChannel.java
|
||
|
@@ -30,7 +30,7 @@ class ServerConnectionChannel extends ChannelInitializer {
|
||
|
channel.pipeline().addLast("timeout", new ReadTimeoutHandler(30)).addLast("legacy_query", new LegacyPingHandler(this.a)).addLast("splitter", new PacketSplitter()).addLast("decoder", new PacketDecoder(NetworkManager.h)).addLast("prepender", new PacketPrepender()).addLast("encoder", new PacketEncoder(NetworkManager.h));
|
||
|
NetworkManager networkmanager = new NetworkManager(false);
|
||
|
|
||
|
- ServerConnection.a(this.a).add(networkmanager);
|
||
|
+ this.a.pending.add(networkmanager); // Paper
|
||
|
channel.pipeline().addLast("packet_handler", networkmanager);
|
||
|
networkmanager.a((PacketListener) (new HandshakeListener(ServerConnection.b(this.a), networkmanager)));
|
||
|
}
|
||
|
--
|
||
|
2.13.3
|
||
|
|