glide icon indicating copy to clipboard operation
glide copied to clipboard

java.net.SocketException: Socket is closed. glide:4.13.2 and okhttp3-integration:4.13.2.

Open Copatych opened this issue 2 years ago • 0 comments

Glide Version: 4.12.0-4.13.2

Integration libraries: com.github.bumptech.glide:compiler:4.13.2 com.github.bumptech.glide:okhttp3-integration:4.13.2

(No problems with version 4.11.0 of glide and Integration libraries.)

Device/Android Version: Samsung Galaxy A50.

Issue details / Repro steps / Use case background: Determinate progress bar has been added for image loading by glide. The implementation is based on https://stackoverflow.com/questions/35305875/progress-bar-while-loading-image-using-glide/48454860#48454860. For this purpose implementation of AppGlideModule and okhttp3-integration library were used. All work fine when loading is not canceled. But "java.net.SocketException: Socket is closed" throws in cases when a RecyclerView with images is scrolled or when Fragment with images was destroyed during image loading.

Glide load line / GlideModule (if any) / list Adapter code (if any):

"Determinate progress bar" is just the use case background. The problem occurs simply when using such an AppGlideModule:

@GlideModule
class ExampleAppGlideModule : AppGlideModule() {
    override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
        super.registerComponents(context, glide, registry)

        val client: OkHttpClient = OkHttpClient.Builder()
                .build()

        registry.replace(GlideUrl::class.java, InputStream::class.java, OkHttpUrlLoader.Factory(client))
    }
}

Glide load line is

val glide = Glide.with(this@ExampleFragment)
...
glide.load(url).into(imageView)

Such line is called in ViewHolder of RecyclerView

Stack trace / LogCat:

W/System.err: java.net.SocketException: Socket is closed
W/System.err:     at [com.android.org](http://com.android.org/).conscrypt.AbstractConscryptSocket.checkOpen(AbstractConscryptSocket.java:584)
W/System.err:     at [com.android.org](http://com.android.org/).conscrypt.ConscryptEngineSocket.startHandshake(ConscryptEngineSocket.java:194)
W/System.err:     at [com.android.org](http://com.android.org/).conscrypt.ConscryptEngineSocket$SSLInputStream.read(ConscryptEngineSocket.java:786)
W/System.err:     at okio.InputStreamSource.read(JvmOkio.kt:90)
W/System.err:     at okio.AsyncTimeout$source$1.read(AsyncTimeout.kt:129)
W/System.err:     at okio.RealBufferedSource.read(RealBufferedSource.kt:188)
W/System.err:     at okhttp3.internal.http1.Http1ExchangeCodec$AbstractSource.read(Http1ExchangeCodec.kt:349)
W/System.err:     at okhttp3.internal.http1.Http1ExchangeCodec$FixedLengthSource.read(Http1ExchangeCodec.kt:386)
W/System.err:     at okhttp3.internal.connection.Exchange$ResponseBodySource.read(Exchange.kt:276)
W/System.err:     at okio.RealBufferedSource$inputStream$1.read(RealBufferedSource.kt:158)
W/System.err:     at [java.io](http://java.io/).FilterInputStream.read(FilterInputStream.java:133)
W/System.err:     at com.bumptech.glide.util.ContentLengthInputStream.read(ContentLengthInputStream.java:71)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.RecyclableBufferedInputStream.fillbuf(RecyclableBufferedInputStream.java:173)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.RecyclableBufferedInputStream.read(RecyclableBufferedInputStream.java:305)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.RecyclableBufferedInputStream.fillbuf(RecyclableBufferedInputStream.java:173)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.RecyclableBufferedInputStream.read(RecyclableBufferedInputStream.java:305)
W/System.err:     at com.bumptech.glide.util.ExceptionPassthroughInputStream.read(ExceptionPassthroughInputStream.java:105)
W/System.err:     at [java.io](http://java.io/).FilterInputStream.read(FilterInputStream.java:133)
W/System.err:     at com.bumptech.glide.util.MarkEnforcingInputStream.read(MarkEnforcingInputStream.java:46)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.RecyclableBufferedInputStream.fillbuf(RecyclableBufferedInputStream.java:173)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.RecyclableBufferedInputStream.read(RecyclableBufferedInputStream.java:305)
W/System.err:     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
W/System.err:     at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:1028)
W/System.err:     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:945)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.ImageReader$InputStreamImageReader.decodeBitmap(ImageReader.java:194)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.Downsampler.decodeStream(Downsampler.java:781)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.Downsampler.getDimensions(Downsampler.java:752)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.Downsampler.decodeFromWrappedStreams(Downsampler.java:317)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.Downsampler.decode(Downsampler.java:285)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.Downsampler.decode(Downsampler.java:222)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder.decode(StreamBitmapDecoder.java:62)
W/System.err:     at com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder.decode(StreamBitmapDecoder.java:18)
W/System.err:     at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:92)
W/System.err:     at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:70)
W/System.err:     at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:59)
W/System.err:     at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76)
W/System.err:     at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57)
W/System.err:     at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:535)
W/System.err:     at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:499)
W/System.err:     at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:485)
W/System.err:     at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:430)
W/System.err:     at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:394)
W/System.err:     at com.bumptech.glide.load.engine.SourceGenerator.cacheData(SourceGenerator.java:176)
W/System.err:     at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:56)
W/System.err:     at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311)
W/System.err:     at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280)
W/System.err:     at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err:     at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:413)
W/System.err:     at java.lang.Thread.run(Thread.java:923)
W/System.err:     at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:372)
D/skia: ---- read threw an exception
D/skia: --- Failed to create image decoder with message 'unimplemented'

Copatych avatar Sep 13 '22 06:09 Copatych