cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=73823ac7b058fb9304cf2d6e9a29c04c92e1d2f3

commit 73823ac7b058fb9304cf2d6e9a29c04c92e1d2f3
Author: michelle legrand <michelle.legr...@openwide.fr>
Date:   Fri Feb 27 15:18:47 2015 +0100

    eio: fix segmentation fault on eio_monitor for win32 api
    
    @fix
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/eio/eio_monitor_win32.c | 34 ++++++++++++++++++++++++----------
 1 file changed, 24 insertions(+), 10 deletions(-)

diff --git a/src/lib/eio/eio_monitor_win32.c b/src/lib/eio/eio_monitor_win32.c
index d092802..06a5f0c 100644
--- a/src/lib/eio/eio_monitor_win32.c
+++ b/src/lib/eio/eio_monitor_win32.c
@@ -158,8 +158,11 @@ _eio_monitor_win32_cb(void *data, Ecore_Win32_Handler *wh 
EINA_UNUSED)
           break;
         }
 
-      if (event >= 0)
-        _eio_monitor_send(w->monitor, name, event);
+      if (w->monitor)
+        {
+           if ((event >= 0) && (event != EIO_MONITOR_ERROR))
+             _eio_monitor_send(w->monitor, name, event);
+        }
 
       free(name);
 
@@ -178,14 +181,25 @@ _eio_monitor_win32_cb(void *data, Ecore_Win32_Handler *wh 
EINA_UNUSED)
    else
      filter |= FILE_NOTIFY_CHANGE_DIR_NAME;
 
-    ReadDirectoryChangesW(w->handle,
-                          (LPVOID)w->buffer,
-                          EIO_MONITOR_WIN32_BUFFER_SIZE,
-                          FALSE,
-                          filter,
-                          &w->buf_length,
-                          &w->overlapped,
-                          NULL);
+   if (!ReadDirectoryChangesW(w->handle,
+                              (LPVOID)w->buffer,
+                              EIO_MONITOR_WIN32_BUFFER_SIZE,
+                              FALSE,
+                              filter,
+                              &w->buf_length,
+                              &w->overlapped,
+                              NULL))
+     {
+        char *msg;
+
+        msg = evil_last_error_get();
+        if (msg)
+          {
+             ERR("%s", msg);
+             free(msg);
+          }
+        return ECORE_CALLBACK_CANCEL;
+     }
 
    return ECORE_CALLBACK_RENEW;
 }

-- 


Reply via email to