docs: @Override
  	public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException {
  		if (sizeLimit > 0){
  	        long nanos = unit.toNanos(timeout);
  	        final ReentrantLock lock = this.sizeLimitLock;
  	        lock.lockInterruptibly();
  	        try {
  	            for (;;) {
  	                if (size() < sizeLimit) {
  	                    return queue.offer(e, timeout, unit);
  	                }
  	                if (nanos <= 0)
  	                    return false;
  	                try {
  	                    nanos = withinSizeLimit.awaitNanos(nanos);
  	                } catch (InterruptedException ie) {
  	                	withinSizeLimit.signal(); // propagate to non-interrupted thread
  	                    throw ie;
  	                }
  	            }
  	        } finally {
  	            lock.unlock();
  	        }
  		}else{
  			return queue.offer(e, timeout, unit);
  		}
  	}