diff options
Diffstat (limited to 'libs/gui/SurfaceTextureClient.cpp')
-rw-r--r-- | libs/gui/SurfaceTextureClient.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp index 57bc604f14..84f2ff4e91 100644 --- a/libs/gui/SurfaceTextureClient.cpp +++ b/libs/gui/SurfaceTextureClient.cpp @@ -222,15 +222,18 @@ int SurfaceTextureClient::dequeueBuffer(android_native_buffer_t** buffer, } if (fence.get()) { - status_t err = fence->wait(Fence::TIMEOUT_NEVER); - if (err != OK) { - ALOGE("dequeueBuffer: error waiting for fence: %d", err); + *fenceFd = fence->dup(); + if (*fenceFd == -1) { + ALOGE("dequeueBuffer: error duping fence: %d", errno); + // dup() should never fail; something is badly wrong. Soldier on + // and hope for the best; the worst that should happen is some + // visible corruption that lasts until the next frame. } - fence.clear(); + } else { + *fenceFd = -1; } *buffer = gbuf.get(); - *fenceFd = -1; return OK; } |