RxJava: StackOverflowError is swallowed
The following code should have thrown StackOverflowError:
final PublishSubject<Integer> a = PublishSubject.create();
final PublishSubject<Integer> b = PublishSubject.create();
a.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Integer args) {
System.out.println(args);
}
});
b.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Integer args) {
System.out.println(args);
}
});
a.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Integer args) {
b.onNext(args + 1);
}
});
b.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Integer args) {
a.onNext(args + 1);
}
});
a.onNext(1);
However, StackOverflowError is swallowed. The problem is the following line in SafeObserver: https://github.com/Netflix/RxJava/blob/0b1b6e7a91d89ad63263b80747f0bd4683fe4ba2/rxjava-core/src/main/java/rx/operators/SafeObserver.java#L117
RxJavaPlugins.getInstance().getErrorHandler().handleError(e);
When StackOverflowError is thrown, there is few stack space. However, this line will generate too big stack frame and cause the thread crash. If I comment out this line, I can observe StackOverflowError.
Reported by Samuel at https://groups.google.com/forum/#!topic/rxjava/eraZ-32w1gQ
About this issue
- Original URL
- State: closed
- Created 10 years ago
- Comments: 16 (11 by maintainers)
Commits related to this issue
- Special Handling of java.lang.Error and OnErrorNotImplemented - https://github.com/Netflix/RxJava/issues/748#issuecomment-32471495 - https://github.com/Netflix/RxJava/issues/771 - https://github.com/... — committed to benjchristensen/RxJava by benjchristensen 10 years ago
- Special Handling of java.lang.Error and OnErrorNotImplemented - https://github.com/Netflix/RxJava/issues/748#issuecomment-32471495 - https://github.com/Netflix/RxJava/issues/771 - https://github.com/... — committed to benjchristensen/RxJava by benjchristensen 10 years ago
- Remove explicit StackOverflow check as its a VirtualMachineError. (#4390) Looks like [the linked comment][1] was misinterpreted (but not in a way that affected the implementation) as Scala considered... — committed to ReactiveX/RxJava by JakeWharton 8 years ago
- Remove explicit StackOverflow check as its a VirtualMachineError. (#4391) Looks like [the linked comment][1] was misinterpreted (but not in a way that affected the implementation) as Scala considered... — committed to ReactiveX/RxJava by JakeWharton 8 years ago
Sorry, my point is that users may not be expecting to be handed such exception, and may swallow them themselves, by for example just logging them. The correct behaviour, IMHO, would be to let them bring down the JVM asap.