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");
 }
 

-- 


Reply via email to