Don't flush packet queue off main thread
Increases risk of deadlock if a plugin using protocollib sends a packet async, and then a listener then reads world state, and main thread is then blocked waiting for the queue to flush. This will break out of the synchronized block when it jumps to the netty event loop. See: https://gist.github.com/aikar/e7abb2ba7059149d0a91f7a226e98590
This commit is contained in:
parent
a4ed58a9ab
commit
1abd2bd279
1 changed files with 3 additions and 3 deletions
|
@ -1,4 +1,4 @@
|
|||
From 57f98e2c510b576b4d3c94b12384b1bc4b6b5e33 Mon Sep 17 00:00:00 2001
|
||||
From 10a32d733a851719edd4c52fc25d673f1e3be4fd Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sat, 2 Mar 2019 14:55:01 -0500
|
||||
Subject: [PATCH] Handle Excessive Signs in Chunks creating large packets
|
||||
|
@ -14,7 +14,7 @@ With further contributions from
|
|||
Co-Authored-by: Spottedleaf <spottedleaf@spottedleaf.dev>
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
index b1dededc15..e966b6edcc 100644
|
||||
index b1dededc15..07e3ddb6e9 100644
|
||||
--- a/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
@@ -158,19 +158,55 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
||||
|
@ -73,7 +73,7 @@ index b1dededc15..e966b6edcc 100644
|
|||
+
|
||||
+ this.packetQueue.addAll(packets); // atomic
|
||||
+ }
|
||||
+ this.sendPacketQueue(); // ensure only one flush call is made
|
||||
+ if (MCUtil.isMainThread()) this.sendPacketQueue();
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue