From: cedric Date: Mon, 2 May 2011 11:20:00 +0000 (+0000) Subject: eina: make sure eina_threads_init/eina_threads_shutdown are correctly called. X-Git-Tag: 2.0_alpha~70^2~76 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2675ea8b45b44003859043694a143b7ec860bcbf;p=framework%2Fuifw%2Feina.git eina: make sure eina_threads_init/eina_threads_shutdown are correctly called. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/eina@59117 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/include/eina_main.h b/src/include/eina_main.h index f7fdf60..74d59d8 100644 --- a/src/include/eina_main.h +++ b/src/include/eina_main.h @@ -111,6 +111,8 @@ EAPI int eina_shutdown(void); * * When the mutexes are not used anymore, call eina_threads_shutdown() to shut down * the mutexes. + * + * This function should never be called outside of the main loop. */ EAPI int eina_threads_init(void); @@ -127,6 +129,8 @@ EAPI int eina_threads_init(void); * Once this function succeeds (that is, @c 0 is returned), you must * not call any of the Eina function in a thread anymore. You must call * eina_threads_init() again to use the Eina functions in a thread again. + * + * This function should never be called outside of the main loop. */ EAPI int eina_threads_shutdown(void); diff --git a/src/lib/eina_main.c b/src/lib/eina_main.c index 26a33e5..e468280 100644 --- a/src/lib/eina_main.c +++ b/src/lib/eina_main.c @@ -28,6 +28,7 @@ # undef WIN32_LEAN_AND_MEAN #endif +#include "eina_lock.h" #include "eina_config.h" #include "eina_private.h" #include "eina_types.h" @@ -46,7 +47,6 @@ #include "eina_magic.h" #include "eina_rectangle.h" #include "eina_safety_checks.h" -#include "eina_lock.h" /*============================================================================* * Local * @@ -78,6 +78,7 @@ EAPI Eina_Bool _eina_threads_activated = EINA_FALSE; #ifdef EINA_HAVE_DEBUG_THREADS EAPI int _eina_threads_debug = 0; +EAPI pthread_t _eina_main_loop = NULL; #endif static Eina_Lock _mutex; @@ -216,8 +217,11 @@ eina_init(void) } } + eina_lock_new(&_mutex); #ifdef EINA_HAVE_DEBUG_THREADS + _eina_main_loop = pthread_self(); + if (getenv("EINA_DEBUG_THREADS")) _eina_threads_debug = atoi(getenv("EINA_DEBUG_THREADS"); #endif @@ -247,6 +251,9 @@ eina_threads_init(void) #ifdef EFL_HAVE_THREADS int ret; +#ifdef EINA_HAVE_DEBUG_THREADS + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif eina_lock_take(&_mutex); ++_eina_main_thread_count; @@ -276,6 +283,11 @@ eina_threads_shutdown(void) #ifdef EFL_HAVE_THREADS int ret; +#ifdef EINA_HAVE_DEBUG_THREADS + assert(pthread_equal(_eina_main_loop, pthread_self())); + assert(_eina_main_thread_count > 0); +#endif + eina_lock_take(&_mutex); ret = --_eina_main_thread_count; if(_eina_main_thread_count > 0)