#endif
};
+#ifdef EINA_LOCK_DEBUG
+# define EINA_LOCK_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0, { 0 }, 0, 0 }
+#else
+# define EINA_LOCK_INITIALIZER { PTHREAD_MUTEX_INITIALIZER }
+#endif
+
+typedef enum
+{
+ EINA_LOCK_FAIL = EINA_FALSE,
+ EINA_LOCK_SUCCEED = EINA_TRUE,
+ EINA_LOCK_DEADLOCK
+} Eina_Lock_Result;
+
EAPI extern Eina_Bool _eina_threads_activated;
#ifdef EINA_HAVE_DEBUG_THREADS
EAPI extern int _eina_threads_debug;
#endif
-static inline Eina_Bool
+static inline Eina_Lock_Result
eina_lock_new(Eina_Lock *mutex)
{
pthread_mutexattr_t attr;
#endif
}
-static inline Eina_Bool
+static inline Eina_Lock_Result
eina_lock_take(Eina_Lock *mutex)
{
Eina_Bool ret;
return ret;
}
-static inline Eina_Bool
+static inline Eina_Lock_Result
eina_lock_take_try(Eina_Lock *mutex)
{
Eina_Bool ret = EINA_FALSE;
else if (ok == EDEADLK)
{
printf("ERROR ERROR: DEADLOCK on lock %p\n", mutex);
- ret = 2; // magic
+ ret = EINA_LOCK_DEADLOCK; // magic
}
#ifdef EINA_LOCK_DEBUG
if (ret == EINA_TRUE)
return ret;
}
-static inline Eina_Bool
+static inline Eina_Lock_Result
eina_lock_release(Eina_Lock *mutex)
{
Eina_Bool ret;