public void run() {
            Set<Address> sent=new HashSet<>(); // list of all unicast dests we already sent a beacon msg
            boolean      mcast_sent=false;

            for(Map.Entry<Short,Entry> entry: ids.entrySet()) {
                Short rsvp_id=entry.getKey();
                Entry val=entry.getValue();
                long age=TimeUnit.MILLISECONDS.convert(System.nanoTime() - val.timestamp, TimeUnit.NANOSECONDS);
                if(age >= timeout || val.ack_collector.size() == 0) {
                    if(age >= timeout)
                        log.warn(Util.getMessage("RSVP_Timeout"), entry);
                    val.destroy();
                    ids.remove(rsvp_id);
                    continue;
                }

                Address dest=val.target;
                // make sure we only send 1 mcast per resend cycle
                if(dest == null) {
                    if(mcast_sent)
                        continue;
                    else
                        mcast_sent=true;
                }
                else if(!sent.add(dest)) // only send a unicast beacon once for each target dest
                    continue;

                RsvpHeader hdr=new RsvpHeader(RsvpHeader.REQ_ONLY, rsvp_id);
                Message msg=new Message(dest).setFlag(Message.Flag.RSVP).putHeader(id,hdr);
                if(log.isTraceEnabled())
                    log.trace(local_addr + ": " + hdr.typeToString() + " --> " + (val.target == null? "cluster" : val.target));
                down_prot.down(msg);
            }
        }