summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Hall <jessehall@google.com>2014-10-21 11:09:17 -0700
committerJesse Hall <jessehall@google.com>2014-10-21 11:11:53 -0700
commitafe2b1fadd29149ceed639357e44e06e97c3a5ca (patch)
tree9916a67f5e0143c9bc647a899bf0495794729cda
parent649bafb7ba2c3204295bc3451ff7af7e28e714ed (diff)
downloadnative-afe2b1fadd29149ceed639357e44e06e97c3a5ca.tar.gz
surfaceflinger: don't close fence fds after passing to queueBuffer
ANativeWindow::queueBuffer takes ownership of the fence fd passed to it, and will close it before returning. SurfaceFlinger's screenshot code was also closing the syncFd it passed to queueBuffer. Most of the time this meant the second close() silently failed, but in a rare race condition the file descriptor could be reused between the two close()s. Bug: 17946343 Change-Id: Ib74fcb1dce52cc21328059c99b7c4c76f41aa3a5
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp4
1 files changed, 1 insertions, 3 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 419b246207..96a8adbaf5 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -3247,10 +3247,8 @@ status_t SurfaceFlinger::captureScreenImplLocked(
} else {
result = BAD_VALUE;
}
+ // queueBuffer takes ownership of syncFd
window->queueBuffer(window, buffer, syncFd);
- if (syncFd != -1) {
- close(syncFd);
- }
}
} else {
result = BAD_VALUE;