From e31564d8eb0ab67e167a888eccce20f5b4e4ef45 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Tue, 29 May 2012 20:41:03 -0700 Subject: [PATCH] Fix a crasher is surfaceflinger. this bug introduced recently would happen when the very first buffer of a surface was rejected for not having the right size Bug: 6577035 Change-Id: I9fabf20006019f2a6c308be7c7f5c05bdcfd5014 --- services/surfaceflinger/Layer.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index d07a4b685..5e17d07a1 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -617,20 +617,20 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions) return; } - // update the active buffer mActiveBuffer = mSurfaceTexture->getCurrentBuffer(); + if (mActiveBuffer == NULL) { + // this can only happen if the very first buffer was rejected. + return; + } mFrameLatencyNeeded = true; - if (oldActiveBuffer == NULL && mActiveBuffer != NULL) { + if (oldActiveBuffer == NULL) { // the first time we receive a buffer, we need to trigger a // geometry invalidation. mFlinger->invalidateHwcGeometry(); } - uint32_t bufWidth = mActiveBuffer->getWidth(); - uint32_t bufHeight = mActiveBuffer->getHeight(); - Rect crop(mSurfaceTexture->getCurrentCrop()); const uint32_t transform(mSurfaceTexture->getCurrentTransform()); const uint32_t scalingMode(mSurfaceTexture->getCurrentScalingMode()); @@ -645,6 +645,8 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions) } if (oldActiveBuffer != NULL) { + uint32_t bufWidth = mActiveBuffer->getWidth(); + uint32_t bufHeight = mActiveBuffer->getHeight(); if (bufWidth != uint32_t(oldActiveBuffer->width) || bufHeight != uint32_t(oldActiveBuffer->height)) { mFlinger->invalidateHwcGeometry();