docs: public void waitUntilComplete(long timeout) {
          long base=System.currentTimeMillis();
          long now=0;
          lock.lock();
          try {
              while(processing || count.get() > 0) {
                  long delay=timeout-now;
                  if(delay <= 0)
                      break;
                  try {
                      processing_done.await(delay, TimeUnit.MILLISECONDS);
                      now=System.currentTimeMillis()-base;
                  }
                  catch(InterruptedException e) {
                  }
              }
          }
          finally {
              lock.unlock();
          }
      }