From 151d4a289f403011e44c085253338df76ca6a1e1 Mon Sep 17 00:00:00 2001 From: Pasqual Koschmieder Date: Thu, 24 Feb 2022 22:41:43 +0100 Subject: [PATCH] Prevent memory leaks with loads of PacketMarker objects (#1511) closes #1509 --- .../protocol/injector/netty/ChannelInjector.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/comphenix/protocol/injector/netty/ChannelInjector.java b/src/main/java/com/comphenix/protocol/injector/netty/ChannelInjector.java index 0073a2d0..37acbf80 100644 --- a/src/main/java/com/comphenix/protocol/injector/netty/ChannelInjector.java +++ b/src/main/java/com/comphenix/protocol/injector/netty/ChannelInjector.java @@ -275,7 +275,7 @@ public class ChannelInjector extends ByteToMessageDecoder implements Injector { @Override public void write(ChannelHandlerContext ctx, Object packet, ChannelPromise promise) throws Exception { super.write(ctx, packet, promise); - ChannelInjector.this.finalWrite(); + ChannelInjector.this.finalWrite(packet); } @Override @@ -544,7 +544,7 @@ public class ChannelInjector extends ByteToMessageDecoder implements Injector { /** * Invoked when a packet has been written to the channel */ - private void finalWrite() { + private void finalWrite(Object packet) { PacketEvent event = finalEvent; if (event != null) { @@ -553,6 +553,10 @@ public class ChannelInjector extends ByteToMessageDecoder implements Injector { currentEvent = null; processor.invokePostEvent(event, NetworkMarker.getNetworkMarker(event)); + + // remove the stored packet markers to prevent memory leaks + // See: https://github.com/dmulloy2/ProtocolLib/issues/1509 + packetMarker.remove(packet); } }