discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=26d73cbae1f28567673d5711e5dbbc964769aa67

commit 26d73cbae1f28567673d5711e5dbbc964769aa67
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Fri Feb 2 16:59:56 2018 -0500

    eio: make inotify monitors fork-safe
    
    @fix
---
 src/lib/eio/eio_monitor_inotify.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/lib/eio/eio_monitor_inotify.c 
b/src/lib/eio/eio_monitor_inotify.c
index 5ff54d5066..f3a83be5b7 100644
--- a/src/lib/eio/eio_monitor_inotify.c
+++ b/src/lib/eio/eio_monitor_inotify.c
@@ -157,8 +157,25 @@ _eio_inotify_handler(void *data EINA_UNUSED, 
Ecore_Fd_Handler *fdh)
 /**
  * @endcond
  */
+static Eina_Bool reseting;
+static void
+_eio_monitor_reset()
+{
+   Eina_Hash *h = _inotify_monitors;
+   Eina_Iterator *it;
+   Eio_Monitor_Backend *backend;
 
-
+   _inotify_monitors = NULL;
+   reseting = 1;
+   eio_monitor_backend_shutdown();
+   eio_monitor_backend_init();
+   it = eina_hash_iterator_data_new(h);
+   EINA_ITERATOR_FOREACH(it, backend)
+     eio_monitor_backend_add(backend->parent);
+   reseting = 0;
+   eina_iterator_free(it);
+   eina_hash_free(h);
+}
 /*============================================================================*
  *                                 Global                                     *
  
*============================================================================*/
@@ -189,6 +206,8 @@ void eio_monitor_backend_init(void)
      }
 
    _inotify_monitors = eina_hash_int32_new(_eio_inotify_del);
+   if (!reseting)
+     ecore_fork_reset_callback_add(_eio_monitor_reset, NULL);
 }
 
 void eio_monitor_backend_shutdown(void)
@@ -207,6 +226,8 @@ void eio_monitor_backend_shutdown(void)
      return;
 
    close(fd);
+   if (!reseting)
+     ecore_fork_reset_callback_del(_eio_monitor_reset, NULL);
 }
 
 void eio_monitor_backend_add(Eio_Monitor *monitor)

-- 


Reply via email to