code: @Override
  	public void close(@NotNull Throwable e) {
  		if (exception != null) return;
  		exception = e instanceof Exception ? (Exception) e : new RuntimeException(e);
  		if (put != null) {
  			put.setException(e);
  			put = null;
  		}
  		if (take != null) {
  			take.setException(e);
  			take = null;
  		}
  		for (int i = head; i != tail; i = (i + 1) & (elements.length - 1)) {
  			tryRecycle(elements[i]);
  		}
  		//noinspection AssignmentToNull - resource release
  		elements = null;
  	}
docs: Closes the buffer if this {@code exception} is not
  {@code null}. Recycles all elements of the buffer and
  sets {@code elements}, {@code put} and {@code take} to
  {@code null}.
  
  @param e exception that is used to close buffer with