2009-04-09 58 views
1

我讀的源代碼的拍擊API和方法XMPPConnection#斷開看起來是這樣的:請確認這XMPP代碼不是線程安全的

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。 單獨的執行線程將通過調用會話#shutdown()來嘗試關閉XMPPConnection的實例。正如我所看到的,我將不得不合作告訴Session通過獲取互斥體或其他東西來關閉XMPPConnection。正確?

回答

4

看起來像是known bug

+0

感謝您指出錯誤。在調用它之前,我不可避免地會在外部進行同步。和平。 – 2009-04-09 04:39:47