Ensure sendServerPacket() works in the channel thread as well.

If we're already in the channel event thread, we won't go through
the ChannelProxy code, so, check scheduledProcessing in the write 
method as well.
This commit is contained in:
Kristian S. Stangeland 2014-03-13 03:02:41 +01:00
parent 4259a86740
commit 38c62c4cfd
2 changed files with 7 additions and 6 deletions

View File

@ -300,7 +300,7 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
NetworkMarker marker = null;
// This packet has not been seen by the main thread
if (event == null) {
if (event == null && scheduleProcessPackets.get()) {
Class<?> clazz = packet.getClass();
// Schedule the transmission on the main thread instead
@ -459,9 +459,12 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
public void sendServerPacket(Object packet, NetworkMarker marker, boolean filtered) {
saveMarker(packet, marker);
scheduleProcessPackets.set(filtered);
invokeSendPacket(packet);
scheduleProcessPackets.set(true);
try {
scheduleProcessPackets.set(filtered);
invokeSendPacket(packet);
} finally {
scheduleProcessPackets.set(true);
}
}
/**

View File

@ -4,8 +4,6 @@ import org.bukkit.entity.Player;
import com.comphenix.protocol.PacketType.Protocol;
import com.comphenix.protocol.events.NetworkMarker;
import com.comphenix.protocol.events.PacketEvent;
/**
* Represents a closed injector.