# \[IGN-12675\] Help with TCP driver Error

**URL:** <https://forum.inductiveautomation.com/t/ign-12675-help-with-tcp-driver-error/105515>\
**Category:** Ignition\
**Tags:** ignition81\
**Created:** [April 24, 2025, 1:47pm UTC](https://forum.inductiveautomation.com/t/ign-12675-help-with-tcp-driver-error/105515 "2025-04-24T13:47:11Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![MikeAllgood](https://avatars.discourse-cdn.com/v4/letter/m/a183cd/32.png) [@MikeAllgood](https://forum.inductiveautomation.com/u/MikeAllgood)\
**Post date:** [April 24, 2025, 1:47pm UTC](https://forum.inductiveautomation.com/t/ign-12675-help-with-tcp-driver-error/105515/1 "2025-04-24T13:47:11Z")

</div>

After pushing an update to a production system, I noticed an error I had not previously seen (however, my client's rep indicated she has seen this before). To me it looks like some issue around TCP Device drivers, but was hoping I could get a betting understanding from those in the know.  
The error message is as follows:

> LEAK: ByteBuf.release() was not called before it's garbage-collected.  
> See [Netty.docs: Reference counted objects](https://netty.io/wiki/reference-counted-objects.html) for more information.  
> Recent access records: Created at: io.netty.buffer.UnpooledByteBufAllocator.newDirectBuffer(UnpooledByteBufAllocator.java:96)  
> io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:188)  
> io.netty.buffer.AbstractByteBufAllocator.buffer(AbstractByteBufAllocator.java:124)  
> io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:871)  
> com.inductiveautomation.xopc.drivers.common.BufferEvaluatorImpl.evaluateBuffer(BufferEvaluatorImpl.java:70)  
> com.inductiveautomation.xopc.drivers.tcp.TCPConnection$TCPChannelHandler.channelRead0(TCPConnection.java:223)  
> com.inductiveautomation.xopc.drivers.tcp.TCPConnection$TCPChannelHandler.channelRead0(TCPConnection.java:193)  
> io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)  
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)  
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)  
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)  
> io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)  
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)  
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)  
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)  
> io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)  
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)  
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)  
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)  
> io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)  
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)  
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)  
> io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)  
> io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)  
> io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)  
> io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)  
> io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)  
> io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)  
> io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995)  
> io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) java.base/java.lang.Thread.run(Unknown Source)

Any help on understanding the cause of this is appeciated.  
Mike

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [April 24, 2025, 1:51pm UTC](https://forum.inductiveautomation.com/t/ign-12675-help-with-tcp-driver-error/105515/2 "2025-04-24T13:51:16Z")

</div>

It looks like a bug in the TCP driver. In some circumstance it's not calling release() on the buffer it uses to accumulate incoming data.

If you can provide full logs there might be more info. It's annoying but not something you need to worry about, this shouldn't actually be a leak and this buffer is created "unpooled" so there's no pool to return it to either.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [April 24, 2025, 1:55pm UTC](https://forum.inductiveautomation.com/t/ign-12675-help-with-tcp-driver-error/105515/3 "2025-04-24T13:55:15Z")

</div>

I made a bug ticket for this.
