You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jf...@apache.org on 2020/02/05 15:15:26 UTC
[plc4x] 01/01: PLC4X-163 Fixed Netty Buffer Leaks for S7 Driver.
This is an automated email from the ASF dual-hosted git repository.
jfeinauer pushed a commit to branch bugfix/PLC4X-163-fix-buffer-leaks
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 6f3a5d496bb67926e4598bde5664a36462d8de7c
Author: julian <j....@pragmaticminds.de>
AuthorDate: Wed Feb 5 16:15:06 2020 +0100
PLC4X-163 Fixed Netty Buffer Leaks for S7 Driver.
---
.../java/org/apache/plc4x/java/isotp/protocol/IsoTPProtocol.java | 6 ++++++
.../src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java | 8 ++++++++
2 files changed, 14 insertions(+)
diff --git a/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/IsoTPProtocol.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/IsoTPProtocol.java
index d486a86..aa54954 100644
--- a/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/IsoTPProtocol.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/IsoTPProtocol.java
@@ -23,6 +23,7 @@ import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
+import io.netty.util.ReferenceCountUtil;
import org.apache.plc4x.java.api.exceptions.PlcProtocolPayloadTooBigException;
import org.apache.plc4x.java.base.PlcMessageToMessageCodec;
import org.apache.plc4x.java.base.events.ConnectEvent;
@@ -220,6 +221,8 @@ public class IsoTPProtocol extends PlcMessageToMessageCodec<IsoOnTcpMessage, Tpd
ByteBuf userData = in.getUserData();
if (userData.writerIndex() < 1) {
+ // Release
+ ReferenceCountUtil.release(userData);
return;
}
@@ -272,6 +275,9 @@ public class IsoTPProtocol extends PlcMessageToMessageCodec<IsoOnTcpMessage, Tpd
tpduSizeParameter -> tpduSize = tpduSizeParameter.getTpduSize());
}
out.add(new IsoTPMessage(tpdu, userData));
+ } else {
+ // No Further Operation -> Release
+ ReferenceCountUtil.release(userData);
}
}
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java
index 8195542..f8a670a 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java
@@ -23,6 +23,7 @@ import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import io.netty.channel.*;
import io.netty.handler.codec.MessageToMessageDecoder;
+import io.netty.util.ReferenceCountUtil;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.PromiseCombiner;
import org.apache.commons.lang3.reflect.FieldUtils;
@@ -440,6 +441,8 @@ public class S7Protocol extends ChannelDuplexHandler {
}
ByteBuf userData = in.getUserData();
if (userData.readableBytes() == 0) {
+ // Release
+ ReferenceCountUtil.release(userData);
return;
}
@@ -448,6 +451,7 @@ public class S7Protocol extends ChannelDuplexHandler {
if (logger.isDebugEnabled()) {
logger.debug("Got Data: {}", ByteBufUtil.hexDump(userData));
}
+ ReferenceCountUtil.release(userData);
return;
}
@@ -478,6 +482,10 @@ public class S7Protocol extends ChannelDuplexHandler {
List<S7Payload> s7Payloads = decodePayloads(userData, isResponse, userDataLength, s7Parameters);
+ // ...
+ ReferenceCountUtil.release(userData);
+ // ...
+
logger.debug("S7 Message with id {} received", tpduReference);
if (isResponse) {