ANR: com.bumptech.glide.request.BaseRequestOptions.clone
- Dominant language
- Java
- Stars
- 35k
- Forks
- 6.2k
- Avg merge
- 1d 11h
- Merged PRs (30d)
- 8
Description
**Glide Version**:
4.16.0
**Integration libraries**:
N/A
**Device/Android Version**:
Android TV/Android 12
**Issue details / Repro steps / Use case background**:
No direct reproduction but reported by PlayStore vitals. It appears to be a lock contention issue in `com.bumptech.glide.RequestManager.onStart` where `com.bumptech.glide.RequestManager.` is still holding a lock. This causes an ANR to occur as `RequestManager.onStart()` runs on the main thread.
**Glide load line / `GlideModule` (if any) / list Adapter code (if any)**:
```kotlin
Glide.with(this) // this is a LinearLayout/LifecycleObserver
.asGif()
.load(R.drawable.loadingboxlooptt)
.into(findViewById(R.id.loadingDots))
.clearOnDetach()
```
**Layout XML**:
```xml
```
**Stack trace / LogCat**:
```ruby
"main" tid=1 Blocked
at com.bumptech.glide.RequestManager.onStart (RequestManager.java)
at com.bumptech.glide.manager.ApplicationLifecycle.addListener (ApplicationLifecycle.java)
at com.bumptech.glide.load.engine.ActiveResources$2.run (ActiveResources.java)
at android.os.Handler.handleCallback (Handler.java:938)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loopOnce (Looper.java:201)
at android.os.Looper.loop (Looper.java:288)
at android.app.ActivityThread.main (ActivityThread.java:7839)
at java.lang.reflect.Method.invoke (Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1006)
"glide-source-thread-0" tid=58 Runnable
at androidx.collection.ArraySet$1.colGetSize (ArraySet.java)
at androidx.collection.MapCollections$MapIterator. (MapCollections.java)
at androidx.collection.MapCollections$KeySet.iterator (MapCollections.java)
at androidx.collection.ArrayMap.putAll (ArrayMap.java)
at com.bumptech.glide.request.BaseRequestOptions.clone (BaseRequestOptions.java)
at com.bumptech.glide.RequestManager. (RequestManager.java)
at com.bumptech.glide.manager.RequestManagerRetriever.get (RequestManagerRetriever.java)
at com.bumptech.glide.load.resource.gif.GifFrameLoader. (GifFrameLoader.java)
at com.bumptech.glide.load.resource.gif.ByteBufferGifDecoder.decode (ByteBufferGifDecoder.java)
at com.bumptech.glide.load.resource.gif.ByteBufferGifDecoder.decode (ByteBufferGifDecoder.java)
at com.bumptech.glide.load.resource.gif.StreamGifDecoder.decode (StreamGifDecoder.java)
at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList (DecodePath.java)
at com.bumptech.glide.load.engine.DecodePath.decode (DecodePath.java)
at com.bumptech.glide.load.engine.LoadPath.load (LoadPath.java)
at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher (DecodeJob.java)
at com.bumptech.glide.load.engine.DecodeJob.decodeFromData (DecodeJob.java)
at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData (DecodeJob.java)
at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady (DecodeJob.java)
at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady (SourceGenerator.java)
at com.bumptech.glide.load.model.DirectResourceLoader$ResourceDataFetcher.loadData (DirectResourceLoader.java)
at com.bumptech.glide.load.engine.SourceGenerator.startNext (SourceGenerator.java)
at com.bumptech.glide.load.engine.DecodeJob.runGenerators (DecodeJob.java)
at com.bumptech.glide.load.engine.DecodeJob.runWrapped (DecodeJob.java)
at com.bumptech.glide.load.engine.DecodeJob.run (DecodeJob.java)
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:920)
at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run (GlideExecutor.java)
```

Contributor guide
Assessment
This issue has not been assessed yet.