From 309cd1eae08d6ffd6d8c93662774c54c494848b7 Mon Sep 17 00:00:00 2001 From: Hans Chua Date: Sat, 9 Jun 2018 18:59:43 +0800 Subject: [PATCH] 2.X: Fix disposed LambdaObserver onError to route to global error handler --- .../internal/observers/LambdaObserver.java | 2 ++ .../observers/LambdaObserverTest.java | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/main/java/io/reactivex/internal/observers/LambdaObserver.java b/src/main/java/io/reactivex/internal/observers/LambdaObserver.java index 041229a1ea..da3a2b85db 100644 --- a/src/main/java/io/reactivex/internal/observers/LambdaObserver.java +++ b/src/main/java/io/reactivex/internal/observers/LambdaObserver.java @@ -79,6 +79,8 @@ public void onError(Throwable t) { Exceptions.throwIfFatal(e); RxJavaPlugins.onError(new CompositeException(t, e)); } + } else { + RxJavaPlugins.onError(t); } } diff --git a/src/test/java/io/reactivex/internal/observers/LambdaObserverTest.java b/src/test/java/io/reactivex/internal/observers/LambdaObserverTest.java index d5d3f647d3..94fe4cb4c1 100644 --- a/src/test/java/io/reactivex/internal/observers/LambdaObserverTest.java +++ b/src/test/java/io/reactivex/internal/observers/LambdaObserverTest.java @@ -15,6 +15,7 @@ import static org.junit.Assert.*; +import java.io.IOException; import java.util.*; import io.reactivex.internal.functions.Functions; @@ -363,4 +364,32 @@ public void customOnErrorShouldReportCustomOnError() { assertTrue(o.hasCustomOnError()); } + + @Test + public void disposedObserverShouldReportErrorOnGlobalErrorHandler() { + List errors = TestHelper.trackPluginErrors(); + try { + final List observerErrors = Collections.synchronizedList(new ArrayList()); + + LambdaObserver o = new LambdaObserver(Functions.emptyConsumer(), + new Consumer() { + @Override + public void accept(Throwable t) { + observerErrors.add(t); + } + }, + Functions.EMPTY_ACTION, + Functions.emptyConsumer()); + + o.dispose(); + o.onError(new IOException()); + o.onError(new IOException()); + + assertTrue(observerErrors.isEmpty()); + TestHelper.assertUndeliverable(errors, 0, IOException.class); + TestHelper.assertUndeliverable(errors, 1, IOException.class); + } finally { + RxJavaPlugins.reset(); + } + } }