From 41956096114fbc99ebc0540896907a3c4d93544c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maurice=20Eisenbl=C3=A4tter?= Date: Mon, 7 Aug 2023 17:31:52 +0200 Subject: [PATCH] fix: async packet processing --- .../protocol/async/AsyncFilterManager.java | 6 +++- .../protocol/async/AsyncListenerHandler.java | 3 -- .../protocol/async/PacketProcessingQueue.java | 28 ++++++------------- 3 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java b/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java index 2eecc60c..7765b0d3 100644 --- a/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java +++ b/src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java @@ -420,11 +420,15 @@ public class AsyncFilterManager implements AsynchronousManager { AsyncListenerHandler handler = marker.getListenerTraversal().next().getListener(); if (!handler.isCancelled()) { - getProcessingQueue(packet).enqueue(packet, onMainThread); + marker.incrementProcessingDelay(); + handler.enqueuePacket(packet); return; } } } + + // There are no more listeners - queue the packet for transmission + signalFreeProcessingSlot(packet); PacketSendingQueue queue = getSendingQueue(packet, false); diff --git a/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java b/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java index 6cb4852f..79094015 100644 --- a/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java +++ b/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java @@ -632,9 +632,6 @@ public class AsyncListenerHandler { filterManager.getErrorReporter().reportMinimal(listener.getPlugin(), methodName, e); } - // There are no more listeners - queue the packet for transmission - filterManager.signalFreeProcessingSlot(packet); - // Note that listeners can opt to delay the packet transmission filterManager.signalPacketTransmission(packet); } diff --git a/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java b/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java index fd9c2684..d0c8da01 100644 --- a/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java +++ b/src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java @@ -131,32 +131,20 @@ class PacketProcessingQueue extends AbstractConcurrentListenerMultimap> iterator = marker.getListenerTraversal(); + Collection> list = getListener(packet.getPacketType()); marker.incrementProcessingDelay(); - if (iterator != null && iterator.hasNext()) { - AsyncListenerHandler handler = marker.getListenerTraversal().next().getListener(); - if (!handler.isCancelled()) { - handler.enqueuePacket(packet); + // Yes, removing the marker will cause the chain to stop + if (list != null) { + Iterator> iterator = list.iterator(); + + if (iterator.hasNext()) { + marker.setListenerTraversal(iterator); + iterator.next().getListener().enqueuePacket(packet); continue; } } - - if (iterator == null) { - Collection> list = getListener(packet.getPacketType()); - - // Yes, removing the marker will cause the chain to stop - if (list != null) { - iterator = list.iterator(); - - if (iterator.hasNext()) { - marker.setListenerTraversal(iterator); - iterator.next().getListener().enqueuePacket(packet); - continue; - } - } - } // The packet has no further listeners. Just send it. if (marker.decrementProcessingDelay() == 0) {