diff --git a/legacy/eina/src/include/eina_main.h b/legacy/eina/src/include/eina_main.h index f7fdf609e2..74d59d84a2 100644 --- a/legacy/eina/src/include/eina_main.h +++ b/legacy/eina/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/legacy/eina/src/lib/eina_main.c b/legacy/eina/src/lib/eina_main.c index 26a33e52ea..e46828064e 100644 --- a/legacy/eina/src/lib/eina_main.c +++ b/legacy/eina/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)