Search in sources :

Example 1 with AtomicThrowable

use of io.reactivex.internal.util.AtomicThrowable in project RxJava by ReactiveX.

the class CompletableMergeDelayErrorArray method subscribeActual.

@Override
public void subscribeActual(final CompletableObserver s) {
    final CompositeDisposable set = new CompositeDisposable();
    final AtomicInteger wip = new AtomicInteger(sources.length + 1);
    final AtomicThrowable error = new AtomicThrowable();
    s.onSubscribe(set);
    for (CompletableSource c : sources) {
        if (set.isDisposed()) {
            return;
        }
        if (c == null) {
            Throwable ex = new NullPointerException("A completable source is null");
            error.addThrowable(ex);
            wip.decrementAndGet();
            continue;
        }
        c.subscribe(new MergeInnerCompletableObserver(s, set, error, wip));
    }
    if (wip.decrementAndGet() == 0) {
        Throwable ex = error.terminate();
        if (ex == null) {
            s.onComplete();
        } else {
            s.onError(ex);
        }
    }
}
Also used : AtomicThrowable(io.reactivex.internal.util.AtomicThrowable) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) AtomicThrowable(io.reactivex.internal.util.AtomicThrowable)

Example 2 with AtomicThrowable

use of io.reactivex.internal.util.AtomicThrowable in project RxJava by ReactiveX.

the class CompletableMergeDelayErrorIterable method subscribeActual.

@Override
public void subscribeActual(final CompletableObserver s) {
    final CompositeDisposable set = new CompositeDisposable();
    s.onSubscribe(set);
    Iterator<? extends CompletableSource> iterator;
    try {
        iterator = ObjectHelper.requireNonNull(sources.iterator(), "The source iterator returned is null");
    } catch (Throwable e) {
        Exceptions.throwIfFatal(e);
        s.onError(e);
        return;
    }
    final AtomicInteger wip = new AtomicInteger(1);
    final AtomicThrowable error = new AtomicThrowable();
    for (; ; ) {
        if (set.isDisposed()) {
            return;
        }
        boolean b;
        try {
            b = iterator.hasNext();
        } catch (Throwable e) {
            Exceptions.throwIfFatal(e);
            error.addThrowable(e);
            break;
        }
        if (!b) {
            break;
        }
        if (set.isDisposed()) {
            return;
        }
        CompletableSource c;
        try {
            c = ObjectHelper.requireNonNull(iterator.next(), "The iterator returned a null CompletableSource");
        } catch (Throwable e) {
            Exceptions.throwIfFatal(e);
            error.addThrowable(e);
            break;
        }
        if (set.isDisposed()) {
            return;
        }
        wip.getAndIncrement();
        c.subscribe(new MergeInnerCompletableObserver(s, set, error, wip));
    }
    if (wip.decrementAndGet() == 0) {
        Throwable ex = error.terminate();
        if (ex == null) {
            s.onComplete();
        } else {
            s.onError(ex);
        }
    }
}
Also used : AtomicThrowable(io.reactivex.internal.util.AtomicThrowable) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) AtomicThrowable(io.reactivex.internal.util.AtomicThrowable) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) MergeInnerCompletableObserver(io.reactivex.internal.operators.completable.CompletableMergeDelayErrorArray.MergeInnerCompletableObserver)

Aggregations

AtomicThrowable (io.reactivex.internal.util.AtomicThrowable)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 CompositeDisposable (io.reactivex.disposables.CompositeDisposable)1 MergeInnerCompletableObserver (io.reactivex.internal.operators.completable.CompletableMergeDelayErrorArray.MergeInnerCompletableObserver)1