in reactive/kotlinx-coroutines-reactive/src/Channel.kt [67:82]
override fun onSubscribe(s: Subscription) {
_subscription.value = s
while (true) { // lock-free loop on _requested
if (isClosedForSend) {
s.cancel()
return
}
val wasRequested = _requested.value
if (wasRequested >= request) return // ok -- normal story
// otherwise, receivers came before we had subscription or need to make initial request
// try to fixup by making request
if (!_requested.compareAndSet(wasRequested, request)) continue
s.request((request - wasRequested).toLong())
return
}
}