From d3ea18fbb814820f2a5f6f647a5db08b4dc50ffc Mon Sep 17 00:00:00 2001 From: Kamil Godlewski Date: Mon, 29 Sep 2025 12:13:57 +0200 Subject: [PATCH] fix: get image info before creating drawable to avoid IllegalStateException as image reference might be closed --- .../drawee/controller/AbstractDraweeController.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drawee/src/main/java/com/facebook/drawee/controller/AbstractDraweeController.java b/drawee/src/main/java/com/facebook/drawee/controller/AbstractDraweeController.java index b901f1f3b5..f3378d73b4 100644 --- a/drawee/src/main/java/com/facebook/drawee/controller/AbstractDraweeController.java +++ b/drawee/src/main/java/com/facebook/drawee/controller/AbstractDraweeController.java @@ -647,7 +647,9 @@ private void onNewResultInternal( isFinished ? Event.ON_DATASOURCE_RESULT : Event.ON_DATASOURCE_RESULT_INT); // create drawable Drawable drawable; + INFO info; try { + info = getImageInfo(image); drawable = createDrawable(image); } catch (Exception exception) { logMessageAndImage("drawable_failed @ onNewResult", image); @@ -665,11 +667,11 @@ private void onNewResultInternal( logMessageAndImage("set_final_result @ onNewResult", image); mDataSource = null; getSettableDraweeHierarchy().setImage(drawable, 1f, wasImmediate); - reportSuccess(id, image, dataSource); + reportSuccess(id, info, dataSource); } else if (deliverTempResult) { logMessageAndImage("set_temporary_result @ onNewResult", image); getSettableDraweeHierarchy().setImage(drawable, 1f, wasImmediate); - reportSuccess(id, image, dataSource); + reportSuccess(id, info, dataSource); // IMPORTANT: do not execute any instance-specific code after this point } else { logMessageAndImage("set_intermediate_result @ onNewResult", image); @@ -846,8 +848,7 @@ private void reportIntermediateFailure(Throwable throwable) { getControllerListener2().onIntermediateImageFailed(mId); } - private void reportSuccess(String id, @Nullable T image, @Nullable DataSource dataSource) { - INFO info = getImageInfo(image); + private void reportSuccess(String id, @Nullable INFO info, @Nullable DataSource dataSource) { getControllerListener().onFinalImageSet(id, info, getAnimatable()); getControllerListener2().onFinalImageSet(id, info, obtainExtras(dataSource, info, null)); }