@Override public void onSubscribe(Subscription s) { sArray[0] = s; if (sub.isActive()) { s.request(1l); }else if(!sub.isOpen){ s.cancel(); } }
private void processQueue(StreamSubscription ss,Consumer<? super T> onNext) { if(active.compareAndSet(false,true)) { while(ss.isActive()) { T next = q.poll(); if (next != null) { onNext.accept(next); ss.requested.decrementAndGet(); } else break; } active.set(false); if (!q.isEmpty() && ss.isActive()) { processQueue(ss,onNext); } } } private void processQueue(Consumer<? super T> onNext) {
@Override public StreamSubscription subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Runnable onComplete) { Object UNSET = new Object(); Object[] last = {UNSET}; StreamSubscription upstream[] = {null}; StreamSubscription result = new StreamSubscription(){ @Override public void request(long n) { super.request(n); upstream[0].request(n ); } @Override public void cancel() { upstream[0].cancel(); super.cancel(); } }; upstream[0] = source.subscribe(e-> { last[0] = e; upstream[0].request(1l); } ,onError,()->{ if (result.isActive() && last[0] != UNSET) { onNext.accept((T) last[0]); } onComplete.run(); }); return result; }
onError.accept(t); sub.requested.decrementAndGet(); if(sub.isActive()) upstream[0].request(1);
while (res.isActive()) { //outer loop to capture missed demand boolean canAdvance = false; while (res.isActive()) { try { canAdvance = split.tryAdvance(onNext); advancing.set(0); if (!canAdvance && res.isActive() && !(status.get() >= 100)) { s[0].request(1); return true; onError.accept(t); res.requested.decrementAndGet(); if(res.isActive()){ s[0].request(1);
if(sub.isActive()) upstream[0].request(1); },()->{
if(sub.isActive()) upstream[0].request(1); },()->{
if(sub.isActive()) upstream[0].request(1); },()->{
if(sub.isActive()) upstream[0].request(1); },()->{
if(sub.isActive()) upstream[0].request(1); },()->{
if(sub.isActive()) upstream[0].request(1); },()->{
if(sub.isActive()) upstream[0].request(1); },()->{
onError.accept(t); sub.requested.decrementAndGet(); if(sub.isActive()) upstream[0].request(1); },()->{
@Override public void onSubscribe(Subscription s) { sArray[0] = s; if (sub.isActive()) { s.request(1l); }else if(!sub.isOpen){ s.cancel(); } }
private void processQueue(StreamSubscription ss,Consumer<? super T> onNext) { if(active.compareAndSet(false,true)) { while(ss.isActive()) { T next = q.poll(); if (next != null) { onNext.accept(next); ss.requested.decrementAndGet(); } else break; } active.set(false); if (!q.isEmpty() && ss.isActive()) { processQueue(ss,onNext); } } } private void processQueue(Consumer<? super T> onNext) {
@Override public StreamSubscription subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Runnable onComplete) { Object UNSET = new Object(); Object[] last = {UNSET}; StreamSubscription upstream[] = {null}; StreamSubscription result = new StreamSubscription(){ @Override public void request(long n) { super.request(n); upstream[0].request(n ); } @Override public void cancel() { upstream[0].cancel(); super.cancel(); } }; upstream[0] = source.subscribe(e-> { last[0] = e; upstream[0].request(1l); } ,onError,()->{ if (result.isActive() && last[0] != UNSET) { onNext.accept((T) last[0]); } onComplete.run(); }); return result; }
onError.accept(t); sub.requested.decrementAndGet(); if(sub.isActive()) upstream[0].request(1);
if(sub.isActive()) upstream[0].request(1); },()->{
if(sub.isActive()) upstream[0].request(1); },()->{
if(sub.isActive()) upstream[0].request(1); },()->{