private void requestAll() { // fast path try { while (keepGoing) { processRow(subscriber); } closeQuietly(); complete(subscriber); } catch (Throwable e) { closeAndHandleException(e); } }
private void requestSome(long n) { // back pressure path // this algorithm copied generally from OnSubscribeFromIterable.java long previousCount = RxUtil.getAndAddRequest(requested, n); if (previousCount == 0) { try { while (true) { long r = requested.get(); long numToEmit = r; while (keepGoing && --numToEmit >= 0) { processRow(subscriber); } if (keepGoing) { if (requested.addAndGet(-r) == 0) { return; } } else { closeQuietly(); complete(subscriber); return; } } } catch (Exception e) { closeAndHandleException(e); } } }