private void clear() { // changed April 21 2004 (bela): SourceForge bug# 938584. We cannot delete our own messages sent between // a join() and a getState(). Otherwise retransmission requests from members who missed those msgs might // fail. Not to worry though: those msgs will be cleared by STABLE (message garbage collection) // sent_msgs.clear(); for(NakReceiverWindow win: xmit_table.values()) { win.reset(); } xmit_table.clear(); }
/** * Remove old members from NakReceiverWindows and add new members (starting seqno=0). Essentially removes all * entries from xmit_table that are not in <code>members</code>. This method is not called concurrently * multiple times */ private void adjustReceivers(boolean remove) { NakReceiverWindow win; if(remove) { // 1. Remove all senders in xmit_table that are not members anymore for(Iterator<Address> it=xmit_table.keySet().iterator(); it.hasNext();) { Address sender=it.next(); if(!members.contains(sender)) { win=xmit_table.get(sender); win.reset(); if(log.isDebugEnabled()) { log.debug("removing " + sender + " from xmit_table (not member anymore)"); } it.remove(); } } } // 2. Add newly joined members to xmit_table (starting seqno=0) for(Address sender: members) { if(!xmit_table.containsKey(sender)) { win=createNakReceiverWindow(sender, INITIAL_SEQNO, 0); xmit_table.put(sender, win); } } }