*
* 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);
* 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);
# undef WIN32_LEAN_AND_MEAN
#endif
+#include "eina_lock.h"
#include "eina_config.h"
#include "eina_private.h"
#include "eina_types.h"
#include "eina_magic.h"
#include "eina_rectangle.h"
#include "eina_safety_checks.h"
-#include "eina_lock.h"
/*============================================================================*
* Local *
#ifdef EINA_HAVE_DEBUG_THREADS
EAPI int _eina_threads_debug = 0;
+EAPI pthread_t _eina_main_loop = NULL;
#endif
static Eina_Lock _mutex;
}
}
+
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
#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;
#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)