code: public List<WindowFuture<K,R,P>> cancelAllExpired() {
          if (this.futures.size() <= 0) {
              return null;
          }
          
          List<WindowFuture<K,R,P>> expired = new ArrayList<WindowFuture<K,R,P>>();
          long now = System.currentTimeMillis();
          this.lock.lock();
          try {
              // check every request this window contains and see if it's expired
              for (DefaultWindowFuture<K,R,P> future : this.futures.values()) {
                  if (future.hasExpireTimestamp() && now >= future.getExpireTimestamp()) {
                      expired.add(future);
                      future.cancelHelper(now);
                  }
              }
              
              if (expired.size() > 0) {
                  // take all expired requests and remove them from the pendingRequests
                  for (WindowFuture<K,R,P> future : expired) {
                      this.futures.remove(future.getKey());
                  }
                  // signal that a future is completed
                  this.completedCondition.signalAll();
              }
          } finally {
              this.lock.unlock();
          }
          return expired;
      }
docs: Cancels (completes) all expired requests. A request is considered expired
  if it has an expireTimestamp set and the current time is &gt;= the
  getExpireTimestamp() value. Any callers/threads waiting for completion
  will be signaled. Also, if more than one request was expired then all
  callers/threads blocked with pending offers will be signaled to continue.
  @return A list of all expired futures that were cancelled.
  @throws InterruptedException Thrown if the calling thread is interrupted
  and we're currently waiting to acquire the internal "windowLock".