docs: @Override
      public final T poll(final long timeout, final TimeUnit unit) throws InterruptedException {
          final long start = getWriteLockWithOptionalWait(timeout, unit);
          if (start == Long.MIN_VALUE) {
              // Min value signals a timeout while waiting
              return null;
          }
          final long maxWait = start >= 0 ? unit.toMillis(timeout) : -1;
  
          try {
              // Wait for an element to be available to return
              if (!this.waitForAdd(start, maxWait)) {
                  return null;
              }
  
              return this.pollInternal(false);
          } finally {
              this.writeLock.unlock();
          }
      }