使用 SslHandler 在通道上关闭通道有时会触发 IllegalReferenceCountException

时间:2021-03-11 20:18:20

标签: ssl netty

我使用的是 Netty 4.1.58 [更新:我也尝试过 Netty 4.1.60]

使用以下方法关闭在其管道中包含 SslHandler 的通道:

    channel.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);

有时(大约 10% 的时间)使用以下堆栈触发 IllegalReferenceCountException:

io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1 在 io.netty.util.internal.ReferenceCountUpdater.toLiveRealRefCnt(ReferenceCountUpdater.java:74) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.internal.ReferenceCountUpdater.release(ReferenceCountUpdater.java:138) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:100) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.ReferenceCountUtil.release(ReferenceCountUtil.java:88) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.ReferenceCountUtil.safeRelease(ReferenceCountUtil.java:113) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.ChannelOutboundBuffer.remove0(ChannelOutboundBuffer.java:306) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.ChannelOutboundBuffer.failFlushed(ChannelOutboundBuffer.java:660) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannel$AbstractUnsafe.closeOutboundBufferForShutdown(AbstractChannel.java:678) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannel$AbstractUnsafe.shutdownOutput(AbstractChannel.java:671) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannel$AbstractUnsafe.handleWriteError(AbstractChannel.java:963) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:943) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.flush0(AbstractEpollChannel.java:520) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:905) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1372) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:742) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:728) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.handler.ssl.SslHandler.forceFlush(SslHandler.java:2099) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.handler.ssl.SslHandler.wrapAndFlush(SslHandler.java:815) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.handler.ssl.SslHandler.flush(SslHandler.java:792) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.handler.ssl.SslHandler.flush(SslHandler.java:1953) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.handler.ssl.SslHandler.closeOutboundAndChannel(SslHandler.java:1921) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.handler.ssl.SslHandler.close(SslHandler.java:743) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannelHandlerContext.invokeClose(AbstractChannelHandlerContext.java:622) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannelHandlerContext.close(AbstractChannelHandlerContext.java:606) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannelHandlerContext.close(AbstractChannelHandlerContext.java:472) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.DefaultChannelPipeline.close(DefaultChannelPipeline.java:957) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.AbstractChannel.close(AbstractChannel.java:232) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.ChannelFutureListener$1.operationComplete(ChannelFutureListener.java:44) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.ChannelFutureListener$1.operationComplete(ChannelFutureListener.java:41) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:184) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.baffle.shield.sql.mssql.ProxySession$ChannelConfiguration.close(ProxySession.java:582) ~[main/:?] 在 io.baffle.shield.sql.mssql.ProxySession.release(ProxySession.java:290) ~[main/:?] 在 io.baffle.shield.sql.mssql.SslUtil.lambda$configureSsl$0(SslUtil.java:248) ~[main/:?] 在 io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:571) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:550) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:609) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:117) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.handler.ssl.SslHandler$5.run(SslHandler.java:2079) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:170) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:472) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:384) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp] 在 java.lang.Thread.run(Thread.java:748) [?:1.8.0_252]

0 个答案:

没有答案