-
Notifications
You must be signed in to change notification settings - Fork 7.6k
Closed
Labels
Description
Versions:
- RxJava: 2.2.2
- RxRelay: 2.0.0
- RxReplayingShare: 2.0.1
We got this rare issue which happens maybe once a month at best over all userbase. Unfortunately I wasn’t able to reproduce it locally.
The meaningful part of the stacktrace looks something like this.
Caused by java.lang.NullPointerException: Attempt to invoke interface method 'boolean io.reactivex.internal.fuseable.SimpleQueue.offer(java.lang.Object)' on a null object reference
at io.reactivex.internal.operators.observable.ObservableSwitchMap$SwitchMapInnerObserver.onNext(ObservableSwitchMap.java:372)
at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:62)
at io.reactivex.internal.operators.observable.ObservableDistinctUntilChanged$DistinctUntilChangedObserver.onNext(ObservableDistinctUntilChanged.java:85)
at com.jakewharton.rx.ReplayingShare$LastSeenObserver.onSubscribe(ReplayingShare.java:96)
at io.reactivex.internal.operators.observable.ObservableRefCount$RefCountObserver.onSubscribe(ObservableRefCount.java:235)
at io.reactivex.internal.operators.observable.ObservablePublish$PublishSource.subscribe(ObservablePublish.java:330)
at io.reactivex.internal.operators.observable.ObservablePublish.subscribeActual(ObservablePublish.java:68)
at io.reactivex.Observable.subscribe(Observable.java:12090)
at io.reactivex.internal.operators.observable.ObservableRefCount.subscribeActual(ObservableRefCount.java:85)
at io.reactivex.Observable.subscribe(Observable.java:12090)
at com.jakewharton.rx.ReplayingShare$LastSeenObservable.subscribeActual(ReplayingShare.java:78)
at io.reactivex.Observable.subscribe(Observable.java:12090)
at io.reactivex.internal.operators.observable.ObservableDistinctUntilChanged.subscribeActual(ObservableDistinctUntilChanged.java:35)
at io.reactivex.Observable.subscribe(Observable.java:12090)
at io.reactivex.internal.operators.observable.ObservableMap.subscribeActual(ObservableMap.java:32)
at io.reactivex.Observable.subscribe(Observable.java:12090)
at io.reactivex.internal.operators.observable.ObservableSwitchMap$SwitchMapObserver.onNext(ObservableSwitchMap.java:127)
at com.jakewharton.rxrelay2.BehaviorRelay$BehaviorDisposable.test(BehaviorRelay.java:354)
at com.jakewharton.rxrelay2.BehaviorRelay$BehaviorDisposable.emitNext(BehaviorRelay.java:348)
at com.jakewharton.rxrelay2.BehaviorRelay.accept(BehaviorRelay.java:127)
at com.jakewharton.rxrelay2.SerializedRelay.accept(SerializedRelay.java:57)
at package.internal.relay.accept
The code causing this looks something like this (at least I hope it does).
val value = BehaviorRelay.createDefault<Optional<Something>>(None).toSerialized()
val valueObservable = value
.switchMap {
when (it) {
is Some -> it
is None -> itemsObservable.map { it.transform() }
}
}
.distinctUntilChanged()
.replayingShare()This is where I’m a bit lost. We have two subscriptions to the valueObservable which do further processing, observe on AndroidSchedulers.mainThread and write values to (very) dumb Consumer instances.
Not sure if any of it helps, but maybe you’ll have some ideas about potential issues with SimpleQueue. Or it is something else.