Rxjava: [2.x] IllegalStateException on Observable.timer with 0 milliseconds

Created on 19 Dec 2016  路  4Comments  路  Source: ReactiveX/RxJava

  • Library version 2.0.3

The following test occasionally fails (about 200 out of 1000 fail):

@Test
fun test() {
    var t: Throwable? = null
    RxJavaPlugins.setErrorHandler { t = it }
    Observable.timer(0L, MILLISECONDS).blockingFirst()
    t?.let { throw it }
}

Stacktrace:

java.lang.IllegalStateException: Disposable already set!

    at io.reactivex.internal.disposables.DisposableHelper.reportDisposableSet(DisposableHelper.java:144)
    at io.reactivex.internal.disposables.DisposableHelper.setOnce(DisposableHelper.java:70)
    at io.reactivex.internal.operators.observable.ObservableTimer$IntervalOnceObserver.setResource(ObservableTimer.java:74)
    at io.reactivex.internal.operators.observable.ObservableTimer.subscribeActual(ObservableTimer.java:40)
    at io.reactivex.Observable.subscribe(Observable.java:10514)
    at io.reactivex.Observable.blockingFirst(Observable.java:4535)
    at myapp.MyTest.test(MyTest.kt:15)

Whenever the test fails, IntervalOnceObserver#setResource is called _after_ it is disposed.

2.x Bug

All 4 comments

Thanks for reporting. If the emission happens before the setResource call, the setResource will find the wrong reference there and complain about it. I'll fix it shortly.

Closing via #4927

Tried v2.0.2 in production and seeing a lot of these crashes come up. I know this has been fixed, but do we have an ETA for v2.0.4? Thank you.

Was this page helpful?
0 / 5 - 0 ratings