summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandy Xu <randy.xu@intel.com>2017-04-18 14:27:10 +0800
committerEmil Velikov <emil.l.velikov@gmail.com>2017-05-05 19:35:08 +0100
commit8020ce02fc2dbc5dd8a8674a64d5a344031b1e03 (patch)
tree067acc61babe1bc14ddddbe0b76dcd9fa712d81e
parent7b4b055a24c081d6befe161c7152d2ccf6057caa (diff)
i965: Solve Android native fence fd double close
The Android native fence in i965 has two fds: _EGLSync::SyncFd and brw_fence::sync_fd. The semantics of __DRI2fenceExtensionRec::create_fence_fd are unclear on whether the DRI driver takes ownership of the incoming fd (which is the same incoming fd from eglCreateSync). i965 did take ownership, but all other Mesa drivers do not; instead, they dup the incoming fd. As a result, _EGLSync::SyncFd and brw_fence::sync_fd were the same fd, and both egl_dri2 and i965 believed they owned it. On eglDestroySync, that led to a double-close. Fix the double-close by making brw_dri_create_fence_fd dup the incoming fd, just like the other drivers do. Signed-off-by: Randy Xu <randy.xu@intel.com> Test: Run Vulkan and GLES stress test and no crash. Fixes: 6403e376511 ("i965/sync: Implement fences based on Linux sync_file") Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Chad Versace <chadversary@chromium.org> [chadv: Polish the commit message] Cc: mesa-stable@lists.freedesktop.org (cherry picked from commit 6f21b5601cc1260eac53f65c8941b3aa66d0f5e9)
-rw-r--r--src/mesa/drivers/dri/i965/brw_sync.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_sync.c b/src/mesa/drivers/dri/i965/brw_sync.c
index 5b78503b34f..a8356c304f9 100644
--- a/src/mesa/drivers/dri/i965/brw_sync.c
+++ b/src/mesa/drivers/dri/i965/brw_sync.c
@@ -470,7 +470,7 @@ brw_dri_create_fence_fd(__DRIcontext *dri_ctx, int fd)
goto fail;
} else {
/* Import the sync fd as an in-fence. */
- fence->sync_fd = fd;
+ fence->sync_fd = dup(fd);
}
assert(fence->sync_fd != -1);