summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaiju Tsuiki <tzik@google.com>2015-04-30 22:15:33 +0900
committerDan Stoza <stoza@google.com>2015-04-30 14:50:17 -0700
commit4d0cd3f5241df28d8259c5ee7df33649c5c10f2d (patch)
tree663fec1c88418b4669905a8a4ed9a56ae4425cd0
parent84f1d9c288f35fa399f97207b6af43a261d5989a (diff)
downloadframeworks_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.cpp6
-rw-r--r--libs/ui/GraphicBufferMapper.cpp3
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
}