code: final void internalWait(long timeout) {
      int s;
      if ((s = status) >= 0 && // force completer to issue notify
          U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) {
        synchronized (this) {
          if (status >= 0)
            try {
              wait(timeout);
            } catch (InterruptedException ie) {
            }
          else
            notifyAll();
        }
      }
    }
docs: If not done, sets SIGNAL status and performs Object.wait(timeout). This task may or may not be
  done on exit. Ignores interrupts.
  
  @param timeout using Object.wait conventions.