summaryrefslogtreecommitdiffstats
path: root/libs/gui
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2011-11-17 18:46:09 -0800
committerMathias Agopian <mathias@google.com>2011-11-17 18:46:09 -0800
commit90cbbd1f7f510e7c173f706919492a95e91a87e7 (patch)
tree228bd0b3b540cdbdb52cea0a6c0fdd9bf33563b2 /libs/gui
parent302afb93d4fd908949ac796eda8343f9683e616a (diff)
downloadframeworks_base-90cbbd1f7f510e7c173f706919492a95e91a87e7.zip
frameworks_base-90cbbd1f7f510e7c173f706919492a95e91a87e7.tar.gz
frameworks_base-90cbbd1f7f510e7c173f706919492a95e91a87e7.tar.bz2
attempt to fix bug 5313580
the working theory here is that a Surface object has become non-promotable because it lost its last reference; later Surface::readFromParcel is called the previous surface is found in the cache, but can't be promoted. this causes a new Surface object to be created which will promptly try to connect to the CPU_API -- this in turn will fail because the previous (now dead) surface is still connected. To fix this, we make sure to disconnect from the SurfaceTexture when Surface[TextureClient] is destroyed. Change-Id: I422234868a05d7b7d283e9d5a85f7ab79e65d8a9
Diffstat (limited to 'libs/gui')
-rw-r--r--libs/gui/SurfaceTextureClient.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp
index 98fa171..48070d6 100644
--- a/libs/gui/SurfaceTextureClient.cpp
+++ b/libs/gui/SurfaceTextureClient.cpp
@@ -36,6 +36,12 @@ SurfaceTextureClient::SurfaceTextureClient() {
SurfaceTextureClient::init();
}
+SurfaceTextureClient::~SurfaceTextureClient() {
+ if (mConnectedToCpu) {
+ SurfaceTextureClient::disconnect(NATIVE_WINDOW_API_CPU);
+ }
+}
+
void SurfaceTextureClient::init() {
// Initialize the ANativeWindow function pointers.
ANativeWindow::setSwapInterval = hook_setSwapInterval;