return true;
    private boolean handleDataReceived(Object sender, long seqno, boolean first, Message msg) {        Entry    entry;        if(trace)            log.trace(new StringBuffer().append(local_addr).append(" <-- DATA(").append(sender).                      append(": #").append(seqno).append(", first=").append(first));        synchronized(connections) {            entry=(Entry)connections.get(sender);            if(entry == null) {                entry=new Entry();                connections.put(sender, entry);            }        }        synchronized(entry) { // only threads accessing the *same* entry will synchronize, everthing else is concurrent            if(entry.received_msgs == null) {                if(first)                    entry.received_msgs=new AckReceiverWindow(seqno);                else {                    if(operational) {                        if(warn)                            log.warn(sender + "#" + seqno + " is not tagged as the first message sent by " + sender +                                    " to me (" + local_addr + "); however, the table for received messages from " + sender +                                    " is null. We probably haven't received the first message from " + sender +                                    ". Discarding message: " + msg + ", headers (excluding UnicastHeader): " + msg.getHeaders());                    }                    return false;                }            }        }        entry.received_msgs.add(seqno, msg); // entry.received_msgs is guaranteed to be non-null if we get here        num_msgs_received++;        num_bytes_received+=msg.getLength();        // Try to remove (from the AckReceiverWindow) as many messages as possible as pass them up        Message  m;        while((m=entry.received_msgs.remove()) != null)            passUp(new Event(Event.MSG, m));        return true;    }