diff options
author | Mathias Agopian <mathias@google.com> | 2011-11-17 18:46:09 -0800 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2011-11-17 18:46:09 -0800 |
commit | 90cbbd1f7f510e7c173f706919492a95e91a87e7 (patch) | |
tree | 228bd0b3b540cdbdb52cea0a6c0fdd9bf33563b2 /libs/gui/SurfaceTextureClient.cpp | |
parent | 302afb93d4fd908949ac796eda8343f9683e616a (diff) | |
download | frameworks_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/SurfaceTextureClient.cpp')
-rw-r--r-- | libs/gui/SurfaceTextureClient.cpp | 6 |
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; |