reactor-core/src/main/java/reactor/core/publisher/EventLoopProcessor.java
static long getAndSub(RingBuffer.Sequence sequence, long toSub) {
		long r, u;
		do {
			r = sequence.getAsLong();
			if (r == 0 || r == Long.MAX_VALUE) {
				return r;
			}
			u = Operators.subOrZero(r, toSub);
		}
		while (!sequence.compareAndSet(r, u));

		return r;
	}
static long getAndSub(RingBuffer.Sequence sequence, long toSub) {
		long r, u;
		do {
			r = sequence.getAsLong();
			if (r == 0 || r == Long.MAX_VALUE) {
				return r;
			}
			u = Operators.subOrZero(r, toSub);
		}
		while (!sequence.compareAndSet(r, u));

		return r;
	}
static long getAndSub ( RingBuffer . Sequence sequence , long toSub ) { long r , u ; do { r = sequence . getAsLong ( ) ; if ( r == 0 || r == Long . MAX_VALUE ) { return r ; } u = Operators . subOrZero ( r , toSub ) ; } while ( ! sequence . compareAndSet ( r , u ) ) ; return r ; }
Concurrent subtraction bound to 0 and Long.MAX_VALUE. Any concurrent write will
"happen" before this operation.

@param sequence current sequence to update
@param toSub delta to sub

@return value before subscription, 0 or Long.MAX_VALUE
Concurrent subtraction bound to 0 and Long . MAX_VALUE . Any concurrent write will happen before this operation .