Example #1
0
 public void pushUpdate(Client.Update obj) {
   synchronized (lock) {
     /* Do inside lock - prevent delay between time and actual work */
     long now = System.currentTimeMillis();
     doAgeOut(now); /* Consider age out */
     UpdateRec r = new UpdateRec();
     r.u = obj;
     UpdateRec oldr = updateSet.remove(r); /* Try to remove redundant event */
     if (oldr != null) {
         /* If found, remove from ordered list too */
       if (oldr.next == oldr) {
           /* Only one? */
         orderedlist = null;
       } else {
         if (orderedlist == oldr) {
             /* We're oldest? */
           orderedlist = oldr.next;
         }
         oldr.next.prev = oldr.prev;
         oldr.prev.next = oldr.next;
       }
       oldr.next = oldr.prev = null;
     }
     updateSet.put(r, r);
     /* Add to end of ordered list */
     if (orderedlist == null) {
       orderedlist = r;
       r.next = r.prev = r;
     } else {
       r.next = orderedlist;
       r.prev = orderedlist.prev;
       r.next.prev = r.prev.next = r;
     }
   }
 }
Example #2
0
  private void doAgeOut(long now) {
    /* If we're due */
    if ((now < lastageout) || (now > (lastageout + ageOutPeriod))) {
      lastageout = now;
      long deadline = now - maxUpdateAge;
      while ((orderedlist != null) && (orderedlist.u.timestamp < deadline)) {
        UpdateRec r = orderedlist;

        updateSet.remove(r); /* Remove record from set */
        if (r.next == r) {
          orderedlist = null;
        } else {
          orderedlist = r.next;
          r.next.prev = r.prev;
          r.prev.next = r.next;
        }
        r.next = r.prev = null;
      }
    }
  }