管道关闭,没有电话关闭

时间:2016-08-01 09:00:27

标签: java pipe nio ice

管道由nio打开。我发现写端点已关闭但读端点已打开。我检查了我的代码,两个端点总是一起关闭。那么,是否有可能在没有自己调用close函数的情况下关闭管道?

PS。代码是zero ice的源代码。我在生产环境中发现了这个问题。代码路径为IceInternal.Selector,管道为_fdIntrRead_fdIntrWrite。我的ice版本为3.3.1

我得到了答案。当前线程被中断时,NIO将关闭通道。这是ice的错误,已在版本3.6中修复。

2 个答案:

答案 0 :(得分:0)

你最有可能在某处关闭它。我常常确信在这样的情况下我没有关闭资源但是在诊断出问题之后我发现了。

我建议现在记录关闭管道的位置(包括堆栈跟踪)作为日志消息。 e.g。

new Throwable(pipe + " closed here").printStackTrace();
pipe.close();

答案 1 :(得分:0)

  

那么,管道是否有可能在没有我自己的关闭功能的情况下关闭?

除非你得到ClosedByInterruptException,否则NIO不会关闭事情。只有应用程序可以做到这一点。