aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0173-Optimise-NetworkManager.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0173-Optimise-NetworkManager.patch')
-rw-r--r--Spigot-Server-Patches/0173-Optimise-NetworkManager.patch125
1 files changed, 125 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0173-Optimise-NetworkManager.patch b/Spigot-Server-Patches/0173-Optimise-NetworkManager.patch
new file mode 100644
index 0000000000..c40a994763
--- /dev/null
+++ b/Spigot-Server-Patches/0173-Optimise-NetworkManager.patch
@@ -0,0 +1,125 @@
+From a969e2064661d379b717bb30ac305302bf3e4472 Mon Sep 17 00:00:00 2001
+From: Alfie Cleveland <[email protected]>
+Date: Fri, 25 Nov 2016 20:35:05 +0000
+Subject: [PATCH] Optimise NetworkManager
+
+
+diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
+index 184ef32a8..be14c0b25 100644
+--- a/src/main/java/net/minecraft/server/NetworkManager.java
++++ b/src/main/java/net/minecraft/server/NetworkManager.java
+@@ -62,8 +62,8 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
+ }
+ };
+ private final EnumProtocolDirection h;
+- private final Queue<NetworkManager.QueuedPacket> i = Queues.newConcurrentLinkedQueue();
+- private final ReentrantReadWriteLock j = new ReentrantReadWriteLock();
++ // private final Queue<NetworkManager.QueuedPacket> i = Queues.newConcurrentLinkedQueue(); // Paper
++ // private final ReentrantReadWriteLock j = new ReentrantReadWriteLock(); // Paper
+ public Channel channel;
+ // Spigot Start // PAIL
+ public SocketAddress l;
+@@ -141,32 +141,36 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
+ if (this.isConnected()) {
+ this.m();
+ this.a(packet, (GenericFutureListener[]) null);
+- } else {
+- this.j.writeLock().lock();
+-
+- try {
+- this.i.add(new NetworkManager.QueuedPacket(packet, (GenericFutureListener[]) null));
+- } finally {
+- this.j.writeLock().unlock();
+- }
+ }
+-
++ // Paper start - Remove but force a conflict
++// else {
++// this.j.writeLock().lock();
++//
++// try {
++// this.i.add(new NetworkManager.QueuedPacket(packet, (GenericFutureListener[]) null));
++// } finally {
++// this.j.writeLock().unlock();
++// }
++// }
++ // Paper end
+ }
+
+ public void sendPacket(Packet<?> packet, GenericFutureListener<? extends Future<? super Void>> genericfuturelistener, GenericFutureListener<? extends Future<? super Void>>... agenericfuturelistener) {
+ if (this.isConnected()) {
+ this.m();
+ this.a(packet, (GenericFutureListener[]) ArrayUtils.add(agenericfuturelistener, 0, genericfuturelistener));
+- } else {
+- this.j.writeLock().lock();
+-
+- try {
+- this.i.add(new NetworkManager.QueuedPacket(packet, (GenericFutureListener[]) ArrayUtils.add(agenericfuturelistener, 0, genericfuturelistener)));
+- } finally {
+- this.j.writeLock().unlock();
+- }
+ }
+-
++ // Paper start - Remove but force a conflict
++// else {
++// this.j.writeLock().lock();
++//
++// try {
++// this.i.add(new NetworkManager.QueuedPacket(packet, (GenericFutureListener[]) ArrayUtils.add(agenericfuturelistener, 0, genericfuturelistener)));
++// } finally {
++// this.j.writeLock().unlock();
++// }
++// }
++ // Paper end
+ }
+
+ private void a(final Packet<?> packet, @Nullable final GenericFutureListener<? extends Future<? super Void>>[] agenericfuturelistener) {
+@@ -211,20 +215,22 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
+ }
+
+ private void m() {
+- if (this.channel != null && this.channel.isOpen()) {
+- this.j.readLock().lock();
+-
+- try {
+- while (!this.i.isEmpty()) {
+- NetworkManager.QueuedPacket networkmanager_queuedpacket = (NetworkManager.QueuedPacket) this.i.poll();
+-
+- this.a(networkmanager_queuedpacket.a, networkmanager_queuedpacket.b);
+- }
+- } finally {
+- this.j.readLock().unlock();
+- }
+-
+- }
++ // Paper start - Remove but force a conflict
++// if (this.channel != null && this.channel.isOpen()) {
++// this.j.readLock().lock();
++//
++// try {
++// while (!this.i.isEmpty()) {
++// NetworkManager.QueuedPacket networkmanager_queuedpacket = (NetworkManager.QueuedPacket) this.i.poll();
++//
++// this.a(networkmanager_queuedpacket.a, networkmanager_queuedpacket.b);
++// }
++// } finally {
++// this.j.readLock().unlock();
++// }
++//
++// }
++ // Paper end
+ }
+
+ public void a() {
+@@ -317,7 +323,7 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
+ } else if (this.i() != null) {
+ this.i().a(new ChatComponentText("Disconnected"));
+ }
+- this.i.clear(); // Free up packet queue.
++ // this.i.clear(); // Free up packet queue. // Paper - remove unneeded packet queue
+ }
+
+ }
+--
+2.12.0.windows.1
+