diff options
| author | 2015-12-18 16:40:31 +0800 | |
|---|---|---|
| committer | 2015-12-25 13:51:31 +0900 | |
| commit | 40d73a799732110b75d33faa707412821c680b50 (patch) | |
| tree | 5ffe1e2cd08496e951eb3ef9294783bb620ee5e0 | |
| parent | e0e81bf407508ec096c752948f8794af5fd480ca (diff) | |
Make sure NaturalSurfaceLayout is consistent with SurfaceControl
SurfaceControl and NaturalSurfaceLayout will be created in screen-off
mode. Screen-on animation also creates NaturalSurfaceLayout. And
NaturalSurfaceLayout uses the reference of SurfaceControl.
SurfaceControl points to NULL when screen-on process calls destory
function, which will not be called in screen-off process. It makes
NaturalSurfaceLayout's member points to the SurfaceControl with NULL.
Crash occurs by accessing the destroyed SurfaceControl.
This CL makes the creation of SurfaceControl and NaturalSurfaceLayout
to one-to-one.
Change-Id: Ic47ea73dea67d2aba4e3e0766d1353198d7dff1d
| -rw-r--r-- | services/core/java/com/android/server/display/ColorFade.java | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/display/ColorFade.java b/services/core/java/com/android/server/display/ColorFade.java index 835ba1734da3..a16fcd2fa112 100644 --- a/services/core/java/com/android/server/display/ColorFade.java +++ b/services/core/java/com/android/server/display/ColorFade.java @@ -587,16 +587,16 @@ final class ColorFade { Slog.e(TAG, "Unable to create surface.", ex); return false; } - } - mSurfaceControl.setLayerStack(mDisplayLayerStack); - mSurfaceControl.setSize(mDisplayWidth, mDisplayHeight); - mSurface = new Surface(); - mSurface.copyFrom(mSurfaceControl); + mSurfaceControl.setLayerStack(mDisplayLayerStack); + mSurfaceControl.setSize(mDisplayWidth, mDisplayHeight); + mSurface = new Surface(); + mSurface.copyFrom(mSurfaceControl); - mSurfaceLayout = new NaturalSurfaceLayout(mDisplayManagerInternal, - mDisplayId, mSurfaceControl); - mSurfaceLayout.onDisplayTransaction(); + mSurfaceLayout = new NaturalSurfaceLayout(mDisplayManagerInternal, + mDisplayId, mSurfaceControl); + mSurfaceLayout.onDisplayTransaction(); + } } finally { SurfaceControl.closeTransaction(); } |