in servicetalk-concurrent-api/src/main/java/io/servicetalk/concurrent/api/SingleConcatWithPublisher.java [257:313]
public void request(long n) {
for (;;) {
final Object oldVal = mayBeResult;
if (oldVal == CANCELLED) {
break;
} else if (oldVal == PUBLISHER_SUBSCRIBED || oldVal == REQUESTED_MORE) {
super.request(n);
break;
} else if (!isRequestNValid(n)) {
mayBeResult = CANCELLED;
try {
target.onError(newExceptionForInvalidRequestN(n));
} finally {
superCancel();
}
break;
} else if (oldVal == INITIAL) {
if (n > 1) {
if (mayBeResultUpdater.compareAndSet(this, oldVal, REQUESTED_MORE)) {
super.request(n - 1);
break;
}
} else {
assert n == 1;
if (mayBeResultUpdater.compareAndSet(this, oldVal, REQUESTED_ONE)) {
break;
}
}
} else if (oldVal == REQUESTED_ONE || oldVal == SINGLE_DELIVERING) {
if (mayBeResultUpdater.compareAndSet(this, oldVal, REQUESTED_MORE)) {
super.request(n);
break;
}
} else if (oldVal == SINGLE_DELIVERED) {
if (mayBeResultUpdater.compareAndSet(this, oldVal, PUBLISHER_SUBSCRIBED)) {
super.request(n);
next.subscribeInternal(this);
break;
}
} else if (n > 1) {
if (mayBeResultUpdater.compareAndSet(this, oldVal, PUBLISHER_SUBSCRIBED)) {
@SuppressWarnings("unchecked")
final T tVal = (T) oldVal;
if (tryEmitSingleSuccessToTarget(tVal)) {
super.request(n - 1);
next.subscribeInternal(this);
}
break;
}
} else if (mayBeResultUpdater.compareAndSet(this, oldVal, SINGLE_DELIVERING)) {
@SuppressWarnings("unchecked")
final T tVal = (T) oldVal;
emitSingleSuccessToTarget(tVal);
break;
}
}
}