Mark refreshPending as false when calling the fakeVsync

The fake vsync needs to get called to ensure dequeueBuffer doesn't get
stuck. However, latchBuffer will not call updateTexImage if the layer
thinks it already has a latched buffer (mRefreshPending = true). Since
mRefreshPending is normally set to false in onPreComposition, removed
layers will not get updated since they are no longer in the layer
hierarchy.

This change sets refreshPending to false for removed layers to ensure
that latchBuffer will attempt to call updateTexImage, allow
dequeueBuffer to continue.

Change-Id: If2a45b2d4cec069068466e0192355999ec265a66
Fixes: 119310197
Test: Open camera, press back, open camera again quickly
diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp
index 5a61122..42021d1 100644
--- a/services/surfaceflinger/BufferQueueLayer.cpp
+++ b/services/surfaceflinger/BufferQueueLayer.cpp
@@ -352,6 +352,14 @@
 // Interface implementation for BufferLayerConsumer::ContentsChangedListener
 // -----------------------------------------------------------------------
 
+void BufferQueueLayer::fakeVsync() {
+    mRefreshPending = false;
+    bool ignored = false;
+    latchBuffer(ignored, systemTime(), Fence::NO_FENCE);
+    usleep(16000);
+    releasePendingBuffer(systemTime());
+}
+
 void BufferQueueLayer::onFrameAvailable(const BufferItem& item) {
     // Add this buffer from our internal queue tracker
     { // Autolock scope
@@ -390,10 +398,7 @@
     // If this layer is orphaned, then we run a fake vsync pulse so that
     // dequeueBuffer doesn't block indefinitely.
     if (isRemovedFromCurrentState()) {
-        bool ignored = false;
-        latchBuffer(ignored, systemTime(), Fence::NO_FENCE);
-        usleep(16000);
-        releasePendingBuffer(systemTime());
+        fakeVsync();
     } else {
         mFlinger->signalLayerUpdate();
     }