private void clear() { NakReceiverWindow win; // 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(); synchronized(received_msgs) { for(Iterator it=received_msgs.values().iterator(); it.hasNext();) { win=(NakReceiverWindow)it.next(); win.reset(); } received_msgs.clear(); received_msgs_size = 0; stack.gfPeerFunctions.setJgSTABLEreceivedMessagesSize(received_msgs_size); } }
/** * Sets (or resets) the contents of the 'digest' table. Its current messages will be deleted and the * NakReceiverTables reset. */ void setDigest(Digest d) { NakReceiverWindow win; long tmp_seqno=1; synchronized(digest) { for(Enumeration e=digest.elements(); e.hasMoreElements();) { win=(NakReceiverWindow) e.nextElement(); win.reset(); } digest.clear(); Map.Entry entry; Address sender; com.gemstone.org.jgroups.protocols.pbcast.Digest.Entry val; for(Iterator it=d.senders.entrySet().iterator(); it.hasNext();) { entry=(Map.Entry)it.next(); sender=(Address)entry.getKey(); if(sender == null) { if(log.isErrorEnabled()) log.error(ExternalStrings.PBCAST_CANNOT_SET_ITEM_BECAUSE_SENDER_IS_NULL); continue; } val=(com.gemstone.org.jgroups.protocols.pbcast.Digest.Entry)entry.getValue(); tmp_seqno=val.high_seqno; digest.put(sender, new NakReceiverWindow(sender, tmp_seqno + 1)); // next to expect, digest had *last* seen ! } } }
if(!isMember(sender)) { win=(NakReceiverWindow)received_msgs.get(sender); win.reset(); if(log.isDebugEnabled()) { log.debug("removing " + sender + " from received_msgs (not member anymore)");
received_msgs_size -= win.unsafeGetSize(); stack.gfPeerFunctions.setJgSTABLEreceivedMessagesSize(received_msgs_size); win.reset(); received_msgs.remove(sender); win=createNakReceiverWindow(sender, initial_seqno);
if(!mbrs.contains(key)) { win=(NakReceiverWindow) digest.get(key); win.reset(); digest.remove(key);