-
Notifications
You must be signed in to change notification settings - Fork 7.6k
Closed
Labels
Description
Version:
io.reactivex.rxjava3:rxjava:3.0.6
Example
@Test
fun stackoverflow() {
val scheduleDirect = Schedulers.single().scheduleDirect {
while (true) { }
}
println(scheduleDirect)
}
This fails as-well:
@Test
fun stackoverflow() {
val scheduleDirect = Schedulers.single().scheduleDirect({
while (true) {
// break
}
}, 1000, TimeUnit.MILLISECONDS)
println(scheduleDirect)
}
but not this:
@Test
fun stackoverflow() {
val scheduleDirect = Schedulers.single().scheduleDirect({
while (true) {
break
}
}, 0, TimeUnit.MILLISECONDS)
Thread.sleep(1)
println(scheduleDirect)
}
StackTrace:
java.lang.StackOverflowError
at java.base/java.util.concurrent.FutureTask.toString(FutureTask.java:497)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.util.concurrent.atomic.AtomicReference.toString(AtomicReference.java:275)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.lang.StringBuilder.append(StringBuilder.java:168)
at java.base/java.util.concurrent.FutureTask.toString(FutureTask.java:513)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.util.concurrent.atomic.AtomicReference.toString(AtomicReference.java:275)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.lang.StringBuilder.append(StringBuilder.java:168)
at java.base/java.util.concurrent.FutureTask.toString(FutureTask.java:513)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.util.concurrent.atomic.AtomicReference.toString(AtomicReference.java:275)
Analysis:
kind of looks like the toString() has a self reference, which triggers a StackOverflowError
Note: when I set some breakpoints and debug slowly the issue will not happen.