static inline Eina_Bool
eina_condition_wait(Eina_Condition *cond)
{
+ Eina_Bool r;
+
#ifdef EINA_HAVE_DEBUG_THREADS
assert(_eina_threads_activated);
assert(cond->lock != NULL);
+
+ pthread_mutex_lock(&_eina_tracking_lock);
+ _eina_tracking = eina_inlist_remove(_eina_tracking,
+ EINA_INLIST_GET(cond->lock));
+ pthread_mutex_unlock(&_eina_tracking_lock);
+#endif
+
+ r = pthread_cond_wait(&(cond->condition),
+ &(cond->lock->mutex)) == 0 ? EINA_TRUE : EINA_FALSE;
+
+#ifdef EINA_HAVE_DEBUG_THREADS
+ pthread_mutex_lock(&_eina_tracking_lock);
+ _eina_tracking = eina_inlist_append(_eina_tracking,
+ EINA_INLIST_GET(cond->lock));
+ pthread_mutex_unlock(&_eina_tracking_lock);
#endif
- return pthread_cond_wait(&(cond->condition),
- &(cond->lock->mutex)) == 0 ? EINA_TRUE : EINA_FALSE;
+ return r;
}
static inline Eina_Bool
eina_condition_timedwait(Eina_Condition *cond, double t)
{
struct timespec tv;
+ Eina_Bool r;
#ifdef EINA_HAVE_DEBUG_THREADS
assert(_eina_threads_activated);
assert(cond->lock != NULL);
+
+ pthread_mutex_lock(&_eina_tracking_lock);
+ _eina_tracking = eina_inlist_remove(_eina_tracking,
+ EINA_INLIST_GET(cond->lock));
+ pthread_mutex_unlock(&_eina_tracking_lock);
#endif
tv.tv_sec = t;
tv.tv_nsec = (t - (double) tv.tv_sec) * 1000000000;
- return pthread_cond_timedwait(&(cond->condition),
- &(cond->lock->mutex),
- &tv) == 0 ?
+ r = pthread_cond_timedwait(&(cond->condition),
+ &(cond->lock->mutex),
+ &tv) == 0 ?
EINA_TRUE : EINA_FALSE;
+
+#ifdef EINA_HAVE_DEBUG_THREADS
+ pthread_mutex_lock(&_eina_tracking_lock);
+ _eina_tracking = eina_inlist_append(_eina_tracking,
+ EINA_INLIST_GET(cond->lock));
+ pthread_mutex_unlock(&_eina_tracking_lock);
+#endif
+
+ return r;
}
static inline Eina_Bool