bumptech / glide

An image loading and caching library for Android focused on smooth scrolling
https://bumptech.github.io/glide/
Other
34.57k stars 6.12k forks source link

StrictMode: Explicit termination method 'response.body().close()' not called #3403

Open hameno opened 5 years ago

hameno commented 5 years ago

Glide Version: 4.8.0 Integration libraries: okhttp3-integration Device/Android Version: Pixel C, 8.0

Stack trace / LogCat:

2018-11-14 15:05:10.216 E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
    java.lang.Throwable: Explicit termination method 'response.body().close()' not called
        at dalvik.system.CloseGuard.open(CloseGuard.java:223)
        at java.lang.reflect.Method.invoke(Native Method)
        at okhttp3.internal.platform.AndroidPlatform$CloseGuard.createAndOpen(AndroidPlatform.java:343)
        at okhttp3.internal.platform.AndroidPlatform.getStackTraceForCloseable(AndroidPlatform.java:158)
        at okhttp3.RealCall.captureCallStackTrace(RealCall.java:89)
        at okhttp3.RealCall.enqueue(RealCall.java:98)
        at com.bumptech.glide.integration.okhttp3.OkHttpStreamFetcher.loadData(OkHttpStreamFetcher.java:53)
        at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:99)
        at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:150)
        at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:144)
        at com.bumptech.glide.integration.okhttp3.OkHttpStreamFetcher.onFailure(OkHttpStreamFetcher.java:62)
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:161)
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)
stale[bot] commented 5 years ago

This issue has been automatically marked as stale because it has not had activity in the last seven days. It will be closed if no further activity occurs within the next seven days. Thank you for your contributions.

hameno commented 5 years ago

bump

stale[bot] commented 5 years ago

This issue has been automatically marked as stale because it has not had activity in the last seven days. It will be closed if no further activity occurs within the next seven days. Thank you for your contributions.

hameno commented 5 years ago

bump

sjudd commented 5 years ago

Can you provide repro steps? Do you only see this on the one particular device?

hameno commented 5 years ago

Not sure if I'm able. Its pretty much standard usage. Not only this device, but I didn't check which exactly, atleast on Android 8.0.

biaomingzhong commented 4 years ago

I am using integration libraries okhttp3-integration. Same here. Crash in StrictMode

trevorwang commented 4 years ago

Same issue here with glide 4.11 and okhttp3 3.12

E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
    java.lang.Throwable: Explicit termination method 'response.body().close()' not called
        at dalvik.system.CloseGuard.open(CloseGuard.java:223)
        at java.lang.reflect.Method.invoke(Native Method)
        at okhttp3.internal.platform.AndroidPlatform$CloseGuard.createAndOpen(AndroidPlatform.java:343)
        at okhttp3.internal.platform.AndroidPlatform.getStackTraceForCloseable(AndroidPlatform.java:158)
        at okhttp3.RealCall.captureCallStackTrace(RealCall.java:115)
        at okhttp3.RealCall.enqueue(RealCall.java:124)
        at com.bumptech.glide.integration.okhttp3.OkHttpStreamFetcher.loadData(OkHttpStreamFetcher.java:51)
        at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)
        at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)
        at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)
        at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)
        at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279)
        at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)
        at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)
Sneyder2328 commented 4 years ago

By the current version of glide I am experiencing a similar bug, while using Strict Mode, here is the log:

E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
    java.lang.Throwable: Explicit termination method 'close' not called
        at dalvik.system.CloseGuard.open(CloseGuard.java:180)
        at java.net.AbstractPlainSocketImpl.create(AbstractPlainSocketImpl.java:103)
        at java.net.Socket.createImpl(Socket.java:470)
        at java.net.Socket.getImpl(Socket.java:536)
        at java.net.Socket.setSoTimeout(Socket.java:1127)
        at com.android.okhttp.Connection.connectSocket(Connection.java:195)
        at com.android.okhttp.Connection.connect(Connection.java:172)
        at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:367)
        at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:329)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126)
        at com.android.tools.profiler.support.network.httpurl.TrackedHttpURLConnection.connect(TrackedHttpURLConnection.java:154)
        at com.android.tools.profiler.support.network.httpurl.HttpURLConnection$.connect(HttpURLConnection$.java:312)
        at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:100)
        at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:56)
        at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)
        at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)
        at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)
        at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)
        at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279)
        at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:761)
        at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)
saran2020 commented 3 years ago

Seeing the same error, with strict mode enabled Glide: 4.11.0

E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
    java.lang.Throwable: Explicit termination method 'end' not called
        at dalvik.system.CloseGuard.open(CloseGuard.java:180)
        at java.util.zip.Inflater.<init>(Inflater.java:104)
        at com.android.okhttp.okio.GzipSource.<init>(GzipSource.java:62)
        at com.android.okhttp.internal.http.HttpEngine.unzip(HttpEngine.java:824)
        at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:1071)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:509)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:438)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:247)
        at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
        at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java)
        at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:102)
        at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:56)
        at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)
        at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:164)
        at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:154)
        at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:62)
        at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)
        at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)
        at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)
        at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)
        at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279)
        at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:762)
        at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)
menscikov commented 3 years ago

Hello, to reproduce the issue follow this steps:

  1. Try to load the image from url, that is not available;
  2. After first image load is failed, load second image from url that is available;

I get this error with strict mode enabled.

TReX24 commented 2 years ago

Having the same issue with Glide 4.13.2:

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:1786) at dalvik.system.CloseGuard.warnIfOpen(CloseGuard.java:264) at java.lang.reflect.Method.invoke(Native Method) at okhttp3.internal.platform.android.CloseGuard.warnIfOpen(CloseGuard.kt:47) at okhttp3.internal.platform.AndroidPlatform.logCloseableLeak(AndroidPlatform.kt:96) at okhttp3.internal.connection.RealConnectionPool.pruneAndGetAllocationCount(RealConnectionPool.kt:231) at okhttp3.internal.connection.RealConnectionPool.cleanup(RealConnectionPool.kt:155) at okhttp3.internal.connection.RealConnectionPool$cleanupTask$1.runOnce(RealConnectionPool.kt:44) at okhttp3.internal.concurrent.TaskRunner.runTask(TaskRunner.kt:116) at okhttp3.internal.concurrent.TaskRunner.access$runTask(TaskRunner.kt:42) at okhttp3.internal.concurrent.TaskRunner$runnable$1.run(TaskRunner.kt:65) 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:764) Caused by: java.lang.Throwable: Explicit termination method 'response.body().close()' not called at dalvik.system.CloseGuard.open(CloseGuard.java:221) at java.lang.reflect.Method.invoke(Native Method) at okhttp3.internal.platform.android.CloseGuard.createAndOpen(CloseGuard.kt:35) at okhttp3.internal.platform.AndroidPlatform.getStackTraceForCloseable(AndroidPlatform.kt:93) at okhttp3.internal.connection.RealCall.callStart(RealCall.kt:170) at okhttp3.internal.connection.RealCall.enqueue(RealCall.kt:163) at com.google.firebase.perf.network.FirebasePerfOkHttpClient.enqueue(FirebasePerfOkHttpClient.java:71) at com.bumptech.glide.integration.okhttp3.OkHttpStreamFetcher.loadData(OkHttpStreamFetcher.java:51) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:413) at java.lang.Thread.run(Thread.java:764) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:372)

freezerain commented 9 months ago

I think this happens after 404, my first though was its related to loading without target in application context. I also see UntaggedSocketViolation in logs from GlideExecutor.java:383 but it looks unrelated. Heres my code:

override suspend fun loadImage(url: String, callback: (Drawable) -> Unit) {
        try {
            callback(withContext(Dispatchers.IO) {
                Glide.with(context)
                    //.clearOnStop() //this not helping
                    .load(url)
                    .submit()
                    .get()
            })
        } catch (e: Exception) {
            when (e) {
                is IOException, is CancellationException, is ExecutionException -> {
                    throw ImageLoadingException("Error loading image using Glide", e)
                }
                else -> throw e
            }
        }
    }

Logs:

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:1986)
                                                                at dalvik.system.CloseGuard.warnIfOpen(CloseGuard.java:336)
                                                                at java.util.zip.Inflater.finalize(Inflater.java:407)
                                                                at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:319)
                                                                at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:306)
                                                                at java.lang.Daemons$Daemon.run(Daemons.java:140)
                                                                at java.lang.Thread.run(Thread.java:1012)
                                                              Caused by: java.lang.Throwable: Explicit termination method 'end' not called
                                                                at dalvik.system.CloseGuard.openWithCallSite(CloseGuard.java:288)
                                                                at dalvik.system.CloseGuard.open(CloseGuard.java:257)
                                                                at java.util.zip.Inflater.<init>(Inflater.java:122)
                                                                at com.android.okhttp.okio.GzipSource.<init>(GzipSource.java:64)
                                                                at com.android.okhttp.internal.http.HttpEngine.unzip(HttpEngine.java:484)
                                                                at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:661)
                                                                at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:475)
                                                                at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
                                                                at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248)
                                                                at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:211)
                                                                at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:30)
                                                                at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:95)
                                                                at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:58)
                                                                at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)
                                                                at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95)
                                                                at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88)
                                                                at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311)
                                                                at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280)
                                                                at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)
                                                                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
                                                                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
                                                                at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:424)
                                                                at java.lang.Thread.run(Thread.java:1012)
                                                                at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:383)