code: public List<WindowFuture<K,R,P>> failAll(Throwable t) throws InterruptedException {
          if (this.futures.size() <= 0) {
              return null;
          }
          
          List<WindowFuture<K,R,P>> failed = 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()) {
                  failed.add(future);
                  future.failedHelper(t, now);
              }
              
              if (failed.size() > 0) {
                  this.futures.clear();
                  // signal that a future is completed
                  this.completedCondition.signalAll();
              }
          } finally {
              this.lock.unlock();
          }
          return failed;
      }
docs: Fails (completes) all requests by setting the same cause of the failure
  on all associated futures. Any callers/threads waiting for completion
  will be signaled. Also, since this frees up all slots in the window, all
  callers/threads blocked with pending offers will be signaled to continue.
  @param t The throwable to set as the failure cause on all associated futures.
  Null values are not accepted (use cancelAll()) instead.
  @return A list of all futures that were failed.
  @throws InterruptedException Thrown if the calling thread is interrupted
  and we're currently waiting to acquire the internal "windowLock".