#include "eina_config.h"
#include "eina_types.h"
+#include "eina_error.h"
/**
* @addtogroup Eina_Tools_Group Tools
# include "eina_inline_lock_void.x"
#endif
+EAPI extern Eina_Error EINA_ERROR_NOT_MAIN_LOOP;
+
static inline Eina_Bool eina_lock_new(Eina_Lock *mutex);
static inline void eina_lock_free(Eina_Lock *mutex);
static inline Eina_Lock_Result eina_lock_take(Eina_Lock *mutex);
static inline Eina_Lock_Result eina_rwlock_take_write(Eina_RWLock *mutex);
static inline Eina_Lock_Result eina_rwlock_release(Eina_RWLock *mutex);
+#ifdef EINA_HAVE_DEBUG_THREADS
+# define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val) \
+ do { \
+ if (EINA_UNLIKELY(eina_main_loop_is())) \
+ { \
+ eina_error_set(EINA_ERROR_NOT_MAIN_LOOP); \
+ EINA_LOG_ERR("You are calling %s from outside" \
+ "of the main loop threads in %s at line %i", \
+ __FUNCTION__, \
+ __FILE__, \
+ __LINE__); \
+ return val; \
+ } \
+ } while (0)
+# define EINA_MAIN_LOOP_CHECK_RETURN \
+ do { \
+ if (EINA_UNLIKELY(eina_main_loop_is())) \
+ { \
+ eina_error_set(EINA_ERROR_NOT_MAIN_LOOP); \
+ EINA_LOG_ERR("You are calling %s from outside" \
+ "of the main loop threads in %s at line %i", \
+ __FUNCTION__, \
+ __FILE__, \
+ __LINE__); \
+ return ; \
+ } \
+ } while (0)
+#else
+# define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val)
+# define EINA_MAIN_LOOP_CHECK_RETURN
+#endif
+
/**
* @}
*/
#define DBG(...) EINA_LOG_DOM_DBG(_eina_log_dom, __VA_ARGS__)
EAPI Eina_Bool _eina_threads_activated = EINA_FALSE;
+EAPI Eina_Error EINA_ERROR_NOT_MAIN_LOOP = 0;
+
+static const char EINA_ERROR_NOT_MAIN_LOOP_STR[] = "Main loop thread check failed.";
#ifdef EFL_HAVE_THREADS
# ifdef _WIN32_WCE
return 0;
}
+ EINA_ERROR_NOT_MAIN_LOOP = eina_error_msg_static_register(
+ EINA_ERROR_NOT_MAIN_LOOP_STR);
+
#ifdef EFL_HAVE_THREADS
# ifdef _WIN32_CE
_eina_main_loop = (HANDLE) GetCurrentThreadId();