diff options
author | Taiju Tsuiki <tzik@google.com> | 2015-04-30 22:15:33 +0900 |
---|---|---|
committer | Dan Stoza <stoza@google.com> | 2015-04-30 14:50:17 -0700 |
commit | 4d0cd3f5241df28d8259c5ee7df33649c5c10f2d (patch) | |
tree | 663fec1c88418b4669905a8a4ed9a56ae4425cd0 | |
parent | 84f1d9c288f35fa399f97207b6af43a261d5989a (diff) | |
download | frameworks_native-4d0cd3f5241df28d8259c5ee7df33649c5c10f2d.zip frameworks_native-4d0cd3f5241df28d8259c5ee7df33649c5c10f2d.tar.gz frameworks_native-4d0cd3f5241df28d8259c5ee7df33649c5c10f2d.tar.bz2 |
Close Fence FDs in error cases of Surface and GraphicBufferMapper
Surface::{cancel,queue}Buffer and GraphicBufferMapper::lockAsyncYCbCr take the
ownership of |fenceFd|s. Though they don't close it on error cases.
Change-Id: I49a7ce8837d5c510c4ac4ad4649f310d18610e80
(cherry picked from commit c7263fb43297744eb04b11025424c0c526d5584c)
-rw-r--r-- | libs/gui/Surface.cpp | 6 | ||||
-rw-r--r-- | libs/ui/GraphicBufferMapper.cpp | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index 5d81f10..35aa7c7 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -267,6 +267,9 @@ int Surface::cancelBuffer(android_native_buffer_t* buffer, Mutex::Autolock lock(mMutex); int i = getSlotFromBufferLocked(buffer); if (i < 0) { + if (fenceFd >= 0) { + close(fenceFd); + } return i; } sp<Fence> fence(fenceFd >= 0 ? new Fence(fenceFd) : Fence::NO_FENCE); @@ -308,6 +311,9 @@ int Surface::queueBuffer(android_native_buffer_t* buffer, int fenceFd) { } int i = getSlotFromBufferLocked(buffer); if (i < 0) { + if (fenceFd >= 0) { + close(fenceFd); + } return i; } diff --git a/libs/ui/GraphicBufferMapper.cpp b/libs/ui/GraphicBufferMapper.cpp index b03e8d6..90a1c11 100644 --- a/libs/ui/GraphicBufferMapper.cpp +++ b/libs/ui/GraphicBufferMapper.cpp @@ -164,6 +164,9 @@ status_t GraphicBufferMapper::lockAsyncYCbCr(buffer_handle_t handle, bounds.left, bounds.top, bounds.width(), bounds.height(), ycbcr); } else { + if (fenceFd >= 0) { + close(fenceFd); + } return -EINVAL; // do not log failure } |