ソースコードを Smack api に読み込んでいます。メソッド XMPPConnection# disconnectは次のようになります。
public void disconnect(Presence unavailablePresence) {
// If not connected, ignore this request.
if (packetReader == null || packetWriter == null) {
return;
}
shutdown(unavailablePresence);
if (roster != null) {
roster.cleanup();
roster = null;
}
wasAuthenticated = false;
packetWriter.cleanup();
packetWriter = null;
packetReader.cleanup();
packetReader = null;
}
私のシナリオでは、Session というクラス内にライブ XMPPConnection を格納しています。別の実行スレッドが、Session# shutdown()を呼び出して XMPPConnection のインスタンスを閉じようとします。私が見ているように、ミューテックスなどを取得して XMPPConnection を閉じるように Session に協調的に指示する必要があります。正しい?