if(log.isInfoEnabled()) log.info("deleting stable msgs < " + sender + "#" + seqno);
if(log.isDebugEnabled()) log.debug("deleting stable msgs < " + sender + "#" + seqno);
    void stable(Digest d) {        long seqno;        NakReceiverWindow recv_win;        Address sender;        long my_highest_rcvd;        // highest seqno received in my digest for a sender P        long stability_highest_rcvd; // highest seqno received in the stability vector for a sender P        if(members == null || local_addr == null || d == null) {            if(log.isWarnEnabled())                log.warn("members, local_addr or digest are null !");            return;        }        if(log.isInfoEnabled())            log.info("received digest " + d);        for(int i=0; i < d.size(); i++) {            sender=d.senderAt(i);            seqno=d.highSeqnoAt(i);            if(sender == null)                continue;            // check whether the last seqno received for a sender P in the stability vector is > last seqno            // received for P in my digest. if yes, request retransmission (see "Last Message Dropped" topic            // in DESIGN)            recv_win=(NakReceiverWindow)received_msgs.get(sender);            if(recv_win != null) {                my_highest_rcvd=recv_win.getHighestReceived();                stability_highest_rcvd=d.highSeqnoSeenAt(i);                if(stability_highest_rcvd >= 0 && stability_highest_rcvd > my_highest_rcvd) {                    if(log.isDebugEnabled())                        log.debug("my_highest_rcvd (" + my_highest_rcvd +                                ") < stability_highest_rcvd (" + stability_highest_rcvd +                                "): requesting retransmission of " + sender + "#" + stability_highest_rcvd);                    retransmit(stability_highest_rcvd, stability_highest_rcvd, sender);                }            }            seqno-=gc_lag;            if(seqno < 0)                continue;             if(log.isInfoEnabled()) log.info("deleting stable msgs < " + sender + "#" + seqno);            // garbage collect from sent_msgs if sender was myself            if(sender.equals(local_addr)) {                if(log.isInfoEnabled())                    log.info("removing [" + deleted_up_to + " - " + seqno + "] from sent_msgs");                for(long j=deleted_up_to; j <= seqno; j++)                    sent_msgs.remove(new Long(j));                deleted_up_to=seqno;            }            // delete *delivered* msgs that are stable            // recv_win=(NakReceiverWindow)received_msgs.get(sender);            if(recv_win != null)                recv_win.stable(seqno);  // delete all messages with seqnos <= seqno        }    }