ecore: Lock in ecore_shutdown
authormike_m <mike_m@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 11 Aug 2011 12:01:19 +0000 (12:01 +0000)
committermike_m <mike_m@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 11 Aug 2011 12:01:19 +0000 (12:01 +0000)
Avoid unbalanced locks when calling event-free callbacks.

Signed-off-by: Mike McCormack <mj.mccormack@samsung.com>
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@62348 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore/ecore.c

index 7f3ff58..9b14b55 100644 (file)
@@ -177,8 +177,12 @@ ecore_init(void)
 EAPI int
 ecore_shutdown(void)
 {
+   /*
+    * take a lock here because _ecore_event_shutdown() does callbacks
+    */
+   _ecore_lock();
    if (--_ecore_init_count != 0)
-     return _ecore_init_count;
+     goto unlock;
 
    ecore_pipe_del(_thread_call);
    eina_lock_free(&_thread_safety);
@@ -217,6 +221,8 @@ ecore_shutdown(void)
 #ifdef HAVE_EVIL
    evil_shutdown();
 #endif
+unlock:
+   _ecore_unlock();
 
    return _ecore_init_count;
 }