OSDN Git Service

No crash from AHardwareBuffer_unlock on NULL fence
authorJiwen 'Steve' Cai <jwcai@google.com>
Fri, 2 Jun 2017 22:23:26 +0000 (15:23 -0700)
committerJiwen 'Steve' Cai <jwcai@google.com>
Fri, 2 Jun 2017 22:26:01 +0000 (15:26 -0700)
The API document states: "If fence is not NULL then it will be set to a
file descriptor that is signaled when all pending work on the buffer is
completed." As it's too late to change the document, we should probably
update the implement and use GraphicsBuffer::unlock under the hood.

Bug: 62302267
Test: Build, AHardware CTS
Change-Id: Ic0fac5d7addfba67baaa1b5d7c221fc25d02df56

libs/nativewindow/AHardwareBuffer.cpp

index c0602e7..2f4b996 100644 (file)
@@ -134,7 +134,10 @@ int AHardwareBuffer_unlock(AHardwareBuffer* buffer, int32_t* fence) {
     if (!buffer) return BAD_VALUE;
 
     GraphicBuffer* gBuffer = AHardwareBuffer_to_GraphicBuffer(buffer);
-    return gBuffer->unlockAsync(fence);
+    if (fence == nullptr)
+        return gBuffer->unlock();
+    else
+        return gBuffer->unlockAsync(fence);
 }
 
 int AHardwareBuffer_sendHandleToUnixSocket(const AHardwareBuffer* buffer, int socketFd) {