From c24078f1a2500dd7227b8be556999968ba51c24b Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Thu, 11 Aug 2016 13:03:02 -0700 Subject: [PATCH] Fix NPE in deferToPendingTransaction. Just because a child window has a surface doesn't necessarily mean the parent window will have a surface. destroySurfaceLocked() only takes care of setting mAttachedHidden so the child surface will be invisible, but it may not be destroyed until a later point. Bug: 30813094 Change-Id: Idb1b03fd61a7537ebfe33bafc93f278c0e6751f4 --- .../core/java/com/android/server/wm/WindowStateAnimator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index e374ee91389f5..351961a8736a9 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -2066,7 +2066,8 @@ class WindowStateAnimator { if (time > mDeferTransactionTime + PENDING_TRANSACTION_FINISH_WAIT_TIME) { mDeferTransactionTime = -1; mDeferTransactionUntilFrame = -1; - } else { + } else if (mWin.mAttachedWindow != null && + mWin.mAttachedWindow.mWinAnimator.hasSurface()) { mSurfaceController.deferTransactionUntil( mWin.mAttachedWindow.mWinAnimator.mSurfaceController.getHandle(), mDeferTransactionUntilFrame);