diff --git a/rxjava-core/src/main/java/rx/internal/operators/OperatorOnErrorReturn.java b/rxjava-core/src/main/java/rx/internal/operators/OperatorOnErrorReturn.java index 799157aaa9..c0ec388a91 100644 --- a/rxjava-core/src/main/java/rx/internal/operators/OperatorOnErrorReturn.java +++ b/rxjava-core/src/main/java/rx/internal/operators/OperatorOnErrorReturn.java @@ -52,13 +52,22 @@ public OperatorOnErrorReturn(Func1 resultFunction) { public Subscriber call(final Subscriber child) { return new Subscriber(child) { + private boolean done = false; + @Override public void onNext(T t) { + if (done) { + return; + } child.onNext(t); } @Override public void onError(Throwable e) { + if (done) { + return; + } + done = true; try { RxJavaPlugins.getInstance().getErrorHandler().handleError(e); T result = resultFunction.call(e); @@ -73,6 +82,10 @@ public void onError(Throwable e) { @Override public void onCompleted() { + if (done) { + return; + } + done = true; child.onCompleted(); }