0

によってパイプが開かれnioます。書き込みエンドポイントが閉じているのに、読み取りエンドポイントが開いていることがわかりました。私は自分のコードをチェックしました.2つのエンドポイントは常に一緒に閉じられています. closeでは、自分で呼び出し関数なしでパイプを閉じる可能性はありますか?

ps。コードは のソースコードですzero ice。本番環境で問題が見つかりました。コード パスはIceInternal.Selector、パイプは_fdIntrReadおよび_fdIntrWriteです。私のiceバージョンは3.3.1.

答えがわかりました。NIO現在のスレッドが中断されたときにチャネルを閉じます。iceバージョンで修正されたバグです3.6

4

2 に答える 2

0

ほとんどの場合、どこかでそれを閉じました。このような場合、リソースを閉じていないと確信することがよくありますが、問題を診断した後、そうであることが判明しました。

とりあえず、パイプを閉じた場所 (スタック トレースを含む) をログ メッセージとして記録することをお勧めします。例えば

new Throwable(pipe + " closed here").printStackTrace();
pipe.close();
于 2016-08-01T09:04:28.583 に答える