管道由nio
. 我发现写端点关闭但读端点打开。我检查了我的代码,两个端点总是一起关闭。那么,是否有可能在没有调用close
功能的情况下由我自己关闭管道?
附言。代码是源代码zero ice
。我在生产环境中发现了问题。代码路径是IceInternal.Selector
,管道是_fdIntrRead
和_fdIntrWrite
。我的ice
版本是3.3.1
.
我得到了答案。NIO
当前线程中断时将关闭通道。这是一个ice
在版本中修复的错误3.6
。
那么,是否有可能在不调用关闭函数的情况下关闭管道?
NIO 不会关闭任何东西,除非你有一个ClosedByInterruptException
. 只有应用程序可以做到这一点。
很可能您确实在某个地方关闭了它。我经常确信在这种情况下我没有关闭资源,但在诊断出问题后,我发现我有。
我建议现在将您关闭管道的位置(包括堆栈跟踪)记录为日志消息。例如
new Throwable(pipe + " closed here").printStackTrace();
pipe.close();