code: public static boolean setOnce(AtomicReference<Disposable> upstream, Disposable next, Class<?> observer) {
      AutoDisposeUtil.checkNotNull(next, "next is null");
      if (!upstream.compareAndSet(null, next)) {
        next.dispose();
        if (upstream.get() != AutoDisposableHelper.DISPOSED) {
          reportDoubleSubscription(observer);
        }
        return false;
      }
      return true;
    }
docs: Atomically updates the target upstream AtomicReference from null to the non-null
  next Disposable, otherwise disposes next and reports a ProtocolViolationException
  if the AtomicReference doesn't contain the shared disposed indicator.
  
  @param upstream the target AtomicReference to update
  @param next the Disposable to set on it atomically
  @param observer the class of the consumer to have a personalized
  error message if the upstream already contains a non-cancelled Disposable.
  @return true if successful, false if the content of the AtomicReference was non null