diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/SurfaceAnimationRunner.java | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java b/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java index 1ae7816ecd24..b93dbceef015 100644 --- a/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java +++ b/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java @@ -62,6 +62,8 @@ import java.util.function.Supplier; */ class SurfaceAnimationRunner { + private static final String TAG = SurfaceAnimationRunner.class.getSimpleName(); + private final Object mLock = new Object(); /** @@ -185,6 +187,16 @@ class SurfaceAnimationRunner { // We must wait for t to be committed since otherwise the leash doesn't have the // windows we want to screenshot and extend as children. t.addTransactionCommittedListener(mEdgeExtensionExecutor, () -> { + if (!animationLeash.isValid()) { + Log.e(TAG, "Animation leash is not valid"); + synchronized (mEdgeExtensionLock) { + mEdgeExtensions.remove(animationLeash); + } + synchronized (mLock) { + mPreProcessingAnimations.remove(animationLeash); + } + return; + } final WindowAnimationSpec animationSpec = a.asWindowAnimationSpec(); final Transaction edgeExtensionCreationTransaction = new Transaction(); @@ -449,8 +461,7 @@ class SurfaceAnimationRunner { // The leash we are trying to screenshot may have been removed by this point, which is // likely the reason for ending up with a null edgeBuffer, in which case we just want to // return and do nothing. - Log.e("SurfaceAnimationRunner", "Failed to create edge extension - " - + "edge buffer is null"); + Log.e(TAG, "Failed to create edge extension - edge buffer is null"); return; } |