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/06 21:02:46 UTC

[plc4x] branch rel/0.6 updated: 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 rel/0.6
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/rel/0.6 by this push:
     new 849ea49  PLC4X-163 Fixed Netty Buffer Leaks for S7 Driver.
849ea49 is described below

commit 849ea49f4ab89fee97184e73e4b20d1eb2bfe1cb
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) {