code: static boolean waitRequestOrTerminalEvent(LongSupplier pendingRequest,
  			RingBuffer.Reader barrier,
  			AtomicBoolean isRunning,
  			LongSupplier nextSequence,
  			Runnable waiter) {
  		try {
  			long waitedSequence;
  			while (pendingRequest.getAsLong() <= 0L) {
  				//pause until first request
  				waitedSequence = nextSequence.getAsLong() + 1;
  				waiter.run();
  				barrier.waitFor(waitedSequence, waiter);
  
  				if (!isRunning.get()) {
  					WaitStrategy.alert();
  				}
  				LockSupport.parkNanos(1L);
  			}
  		}
  		catch (InterruptedException ie) {
  			Thread.currentThread()
  			      .interrupt();
  		}
  
  		catch (Exception e) {
  			if (!isRunning.get() || WaitStrategy.isAlert(e)) {
  				return false;
  			}
  			throw e;
  		}
  
  		return true;
  	}
docs: Spin CPU until the request {@link LongSupplier} is populated at least once by a
  strict positive value. To relieve the spin loop, the read sequence itself will be
  used against so it will wake up only when a signal is emitted upstream or other
  stopping condition including terminal signals thrown by the {@link
  RingBuffer.Reader} waiting barrier.
  
  @param pendingRequest the {@link LongSupplier} request to observe
  @param barrier {@link RingBuffer.Reader} to wait on
  @param isRunning {@link AtomicBoolean} calling loop running state
  @param nextSequence {@link LongSupplier} ring buffer read cursor
  @param waiter an optional extra spin observer for the wait strategy in {@link
  RingBuffer.Reader}
  
  @return true if a request has been received, false in any other case.