discomfitor pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=ee3df4efc384d71b7b83b7538423bf9d9019f6eb
commit ee3df4efc384d71b7b83b7538423bf9d9019f6eb Author: Derek Foreman <[email protected]> Date: Tue Jun 19 13:43:54 2018 -0400 ecore_wl2: Better error handling for dmabuf sync ioctls Summary: Turns out these can fail with EINTR or EAGAIN, and we're supposed to try again. Reviewers: zmike Reviewed By: zmike Subscribers: cedric, #committers, zmike Tags: #efl Differential Revision: https://phab.enlightenment.org/D6250 --- src/lib/ecore_wl2/ecore_wl2_buffer.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lib/ecore_wl2/ecore_wl2_buffer.c b/src/lib/ecore_wl2/ecore_wl2_buffer.c index 498e3091f5..8e2e164546 100644 --- a/src/lib/ecore_wl2/ecore_wl2_buffer.c +++ b/src/lib/ecore_wl2/ecore_wl2_buffer.c @@ -111,7 +111,11 @@ _dmabuf_lock(Ecore_Wl2_Buffer *b) struct dma_buf_sync s; s.flags = DMA_BUF_SYNC_START | DMA_BUF_SYNC_RW; - ret = ioctl(b->fd, DMA_BUF_IOCTL_SYNC, &s); + do + { + ret = ioctl(b->fd, DMA_BUF_IOCTL_SYNC, &s); + } while (ret && ((errno == EAGAIN) || (errno == EINTR))); + if (ret) WRN("Failed to lock dmabuf"); } @@ -122,7 +126,11 @@ _dmabuf_unlock(Ecore_Wl2_Buffer *b) struct dma_buf_sync s; s.flags = DMA_BUF_SYNC_END | DMA_BUF_SYNC_RW; - ret = ioctl(b->fd, DMA_BUF_IOCTL_SYNC, &s); + do + { + ret = ioctl(b->fd, DMA_BUF_IOCTL_SYNC, &s); + } while (ret && ((errno == EAGAIN) || (errno == EINTR))); + if (ret) WRN("Failed to unlock dmabuf"); } --
