Skip to content

StrictMode policy violation: android.os.strictmode.LeakedClosableViolation #421

@Pjnous

Description

@Pjnous

Hello,

We have added the strict mode policy to our project:

if (BuildConfig.DEBUG) {
StrictMode.setVmPolicy(
StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.build()
)
}

Since then I have noticed in Logcat

android.os.strictmode.LeakedClosableViolation: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.

The full stacktrace is:

D/StrictMode: StrictMode policy violation: android.os.strictmode.LeakedClosableViolation: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
at android.os.StrictMode$AndroidCloseGuardReporter.report(StrictMode.java:1877)
at dalvik.system.CloseGuard.warnIfOpen(CloseGuard.java:286)
at java.io.FileInputStream.finalize(FileInputStream.java:493)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:289)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:276)
at java.lang.Daemons$Daemon.run(Daemons.java:137)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.lang.Throwable: Explicit termination method 'close' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:237)
at java.io.FileInputStream.(FileInputStream.java:174)
at okio.Okio__JvmOkioKt.source(JvmOkio.kt:178)
at okio.Okio.source(Unknown Source:1)
at com.chuckerteam.chucker.api.ChuckerInterceptor$ChuckerTransactionTeeCallback.readResponseBuffer(ChuckerInterceptor.kt:251)
at com.chuckerteam.chucker.api.ChuckerInterceptor$ChuckerTransactionTeeCallback.onSuccess(ChuckerInterceptor.kt:239)
at com.chuckerteam.chucker.internal.support.TeeSource.close(TeeSource.kt:69)
at okio.RealBufferedSource.close(RealBufferedSource.kt:498)
at okio.RealBufferedSource.close(RealBufferedSource.kt:498)
at okio.InflaterSource.close(InflaterSource.kt:136)
at okio.GzipSource.close(GzipSource.kt:171)
at okio.RealBufferedSource.close(RealBufferedSource.kt:498)
at okhttp3.internal.Util.closeQuietly(Util.kt:491)
at okhttp3.ResponseBody.close(ResponseBody.kt:192)
at retrofit2.OkHttpCall$ExceptionCatchingResponseBody.close(OkHttpCall.java:340)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:46)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
at retrofit2.OkHttpCall.execute(OkHttpCall.java:204)
at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:46)
at io.reactivex.Observable.subscribe(Observable.java:12267)
at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:35)
at io.reactivex.Observable.subscribe(Observable.java:12267)
at io.reactivex.internal.operators.observable.ObservableSingleSingle.subscribeActual(ObservableSingleSingle.java:35)
at io.reactivex.Single.subscribe(Single.java:3603)
at com.akaita.java.rxjava2debug.extensions.SingleOnAssembly.subscribeActual(SingleOnAssembly.java:41)
at io.reactivex.Single.subscribe(Single.java:3603)
at io.reactivex.Single.blockingGet(Single.java:2834)
at cz.app.WeatherSyncer$getWorkSingle$1.call(WeatherSyncer.kt:25)
at cz.app.WeatherSyncer$getWorkSingle$1.call(WeatherSyncer.kt:13)
at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
at io.reactivex.Single.subscribe(Single.java:3603)
at com.akaita.java.rxjava2debug.extensions.SingleOnAssembly.subscribeActual(SingleOnAssembly.java:41)
at io.reactivex.Single.subscribe(Single.java:3603)
at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919) 

Expected behaviour is that the stream should be closed.
Version of Chucker is 3.2.0

Tested on Pixel 3 API 29 emulator.

Thank you, with best regards Pavel Tupec

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions