bumptech / bumptech/glide

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

Open
#4,894 0 comments 5 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
35k
Forks
6.2k
Avg merge
1d 11h
Merged PRs (30d)
8

Description

**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:
```kotlin
@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
```kotlin
val glide = Glide.with(this@ExampleFragment)
...
glide.load(url).into(imageView)
```
Such line is called in ViewHolder of RecyclerView

**Stack trace / LogCat**:
```ruby
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'
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.