Skip to content

Commit b9e224d

Browse files
committed
fix: enqueue asnyc packet event after processing delay is zero
1 parent 02e917c commit b9e224d

File tree

3 files changed

+33
-20
lines changed

3 files changed

+33
-20
lines changed

src/main/java/com/comphenix/protocol/async/AsyncFilterManager.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,19 @@ private void signalPacketTransmission(PacketEvent packet, boolean onMainThread)
413413

414414
// Only send if the packet is ready
415415
if (marker.decrementProcessingDelay() == 0) {
416+
417+
// Now, get the next non-cancelled listener
418+
if (!marker.hasExpired()) {
419+
for (; marker.getListenerTraversal().hasNext(); ) {
420+
AsyncListenerHandler handler = marker.getListenerTraversal().next().getListener();
421+
422+
if (!handler.isCancelled()) {
423+
getProcessingQueue(packet).enqueue(packet, onMainThread);
424+
return;
425+
}
426+
}
427+
}
428+
416429
PacketSendingQueue queue = getSendingQueue(packet, false);
417430

418431
// No need to create a new queue if the player has logged out

src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -632,18 +632,6 @@ private void processPacket(int workerID, PacketEvent packet, String methodName)
632632
filterManager.getErrorReporter().reportMinimal(listener.getPlugin(), methodName, e);
633633
}
634634

635-
// Now, get the next non-cancelled listener
636-
if (!marker.hasExpired()) {
637-
for (; marker.getListenerTraversal().hasNext(); ) {
638-
AsyncListenerHandler handler = marker.getListenerTraversal().next().getListener();
639-
640-
if (!handler.isCancelled()) {
641-
handler.enqueuePacket(packet);
642-
return;
643-
}
644-
}
645-
}
646-
647635
// There are no more listeners - queue the packet for transmission
648636
filterManager.signalFreeProcessingSlot(packet);
649637

src/main/java/com/comphenix/protocol/async/PacketProcessingQueue.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,20 +131,32 @@ public void signalBeginProcessing(boolean onMainThread) {
131131
if (holder != null) {
132132
PacketEvent packet = holder.getEvent();
133133
AsyncMarker marker = packet.getAsyncMarker();
134-
Collection<PrioritizedListener<AsyncListenerHandler>> list = getListener(packet.getPacketType());
134+
Iterator<PrioritizedListener<AsyncListenerHandler>> iterator = marker.getListenerTraversal();
135135

136136
marker.incrementProcessingDelay();
137137

138-
// Yes, removing the marker will cause the chain to stop
139-
if (list != null) {
140-
Iterator<PrioritizedListener<AsyncListenerHandler>> iterator = list.iterator();
141-
142-
if (iterator.hasNext()) {
143-
marker.setListenerTraversal(iterator);
144-
iterator.next().getListener().enqueuePacket(packet);
138+
if (iterator != null && iterator.hasNext()) {
139+
AsyncListenerHandler handler = marker.getListenerTraversal().next().getListener();
140+
if (!handler.isCancelled()) {
141+
handler.enqueuePacket(packet);
145142
continue;
146143
}
147144
}
145+
146+
if (iterator == null) {
147+
Collection<PrioritizedListener<AsyncListenerHandler>> list = getListener(packet.getPacketType());
148+
149+
// Yes, removing the marker will cause the chain to stop
150+
if (list != null) {
151+
iterator = list.iterator();
152+
153+
if (iterator.hasNext()) {
154+
marker.setListenerTraversal(iterator);
155+
iterator.next().getListener().enqueuePacket(packet);
156+
continue;
157+
}
158+
}
159+
}
148160

149161
// The packet has no further listeners. Just send it.
150162
if (marker.decrementProcessingDelay() == 0) {

0 commit comments

Comments
 (0)