Okhttp: StackOverflowError on Android 4.4 and below

Created on 18 Oct 2017  路  1Comment  路  Source: square/okhttp

I get StackOverflowError on Android 4.4 (tested on 6 devices) and below. On 5.0 works perfect. I have around 8 calls one by one, first few (3-4) works great and on next I get error. I add 2 custom Interceptor. It added only one (check on interceptors on RealInterceptorChain class). I used okhttp 3.9.0 with retrofit 2.3.0 and rjava 2.1.5

10-18 14:15:07.633 31641-32137/xxx E/AndroidRuntime: FATAL EXCEPTION: RxNewThreadScheduler-1 Process: xxx, PID: 31641 io.reactivex.exceptions.UndeliverableException: java.lang.StackOverflowError at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:349) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:64) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) Caused by: java.lang.StackOverflowError at java.util.ArrayList.equals(ArrayList.java:617) at java.util.Collections$UnmodifiableList.equals(Collections.java:1046) at okhttp3.Address.equalsNonHost(Address.java:178) at okhttp3.OkHttpClient$1.equalsNonHost(OkHttpClient.java:157) at okhttp3.internal.connection.RealConnection.isEligible(RealConnection.java:417) at okhttp3.ConnectionPool.get(ConnectionPool.java:125) at okhttp3.OkHttpClient$1.get(OkHttpClient.java:153) at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:187) at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:134) at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:113) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at xxx.VersionInterceptor.intercept(VersionInterceptor.java:31) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at xxx.AddCookiesInterceptor.intercept(AddCookiesInterceptor.java:38) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200) at okhttp3.RealCall.execute(RealCall.java:77) at retrofit2.OkHttpCall.execute(OkHttpCall.java:180) at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:41) at io.reactivex.Observable.subscribe(Observable.java:10910) at retrofit2.adapter.rxjava2.ResultObservable.subscribeActual(ResultObservable.java:34) at io.reactivex.Observable.subscribe(Observable.java:10910) at io.reactivex.internal.operators.flowable.FlowableFromObservable.subscribeActual(FlowableFromObservable.java:29) at io.reactivex.Flowable.subscribe(Flowable.java:12994) at io.reactivex.internal.operators.flowable.FlowableOnBackpressureLatest.subscribeActual(FlowableOnBackpressureLatest.java:32) at io.reactivex.Flowable.subscribe(Flowable.java:12994) at io.reactivex.internal.operators.flowable.FlowableFlatMap

android stackoverflow

>All comments

I don't think this counts as an OkHttp bug. The combination of libraries you are using unfortunately overflows the stack on older devices. Can you post in stackoverflow (no pun intended).

Was this page helpful?
0 / 5 - 0 ratings

Related issues

GuiForget picture GuiForget  路  3Comments

albka1986 picture albka1986  路  3Comments

rfc2822 picture rfc2822  路  3Comments

yschimke picture yschimke  路  3Comments

yschimke picture yschimke  路  3Comments