我在使用netty做项目的时候发生了错误,错误堆栈信息如下:
io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
at io.netty.util.internal.ReferenceCountUpdater.toLiveRealRefCnt(ReferenceCountUpdater.java:83)
at io.netty.util.internal.ReferenceCountUpdater.release(ReferenceCountUpdater.java:148)
at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:101)
at io.netty.util.ReferenceCountUtil.release(ReferenceCountUtil.java:90)
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:106)
原因分析
发生错误的原因是重复释放ByteBuf缓冲区,我在处理器中手动调用了release释放buf,然而该buf是由netty底层进行管理的,会被再次调用,所以出现了该错误!
解决方案
删除ReferenceCountUtil.release(buf)
该行代码。
protected void channelRead0(ChannelHandlerContext ctx, ByteBuf buf) {
try {
}finally {
//ReferenceCountUtil.release(buf);//删除该行代码,buf由netty底层进行管理
}
}