eina: improve lock debugging.

SVN revision: 59293
This commit is contained in:
Cedric BAIL 2011-05-09 12:54:47 +00:00
parent cfae43f754
commit c73f0f9cf5
1 changed files with 14 additions and 12 deletions

View File

@ -73,6 +73,18 @@ EAPI extern pthread_mutex_t _eina_tracking_lock;
EAPI extern Eina_Inlist *_eina_tracking;
#endif
static inline void
eina_lock_debug(const Eina_Lock *mutex)
{
#ifdef EINA_HAVE_DEBUG_THREADS
printf("lock %p, locked: %i, by %i\n",
mutex, (int)mutex->locked, (int)mutex->lock_thread_id);
backtrace_symbols_fd((void **)mutex->lock_bt, mutex->lock_bt_num, 1);
#else
(void) mutex;
#endif
}
static inline Eina_Bool
eina_lock_new(Eina_Lock *mutex)
{
@ -159,7 +171,9 @@ eina_lock_take(Eina_Lock *mutex)
else if (ok == EDEADLK)
{
printf("ERROR ERROR: DEADLOCK on lock %p\n", mutex);
eina_lock_debug(mutex);
ret = EINA_LOCK_DEADLOCK; // magic
if (_eina_threads_debug) abort();
}
#ifdef EINA_HAVE_DEBUG_THREADS
@ -251,18 +265,6 @@ eina_lock_release(Eina_Lock *mutex)
return ret;
}
static inline void
eina_lock_debug(const Eina_Lock *mutex)
{
#ifdef EINA_HAVE_DEBUG_THREADS
printf("lock %p, locked: %i, by %i\n",
mutex, (int)mutex->locked, (int)mutex->lock_thread_id);
backtrace_symbols_fd((void **)mutex->lock_bt, mutex->lock_bt_num, 1);
#else
(void) mutex;
#endif
}
static inline Eina_Bool
eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex)
{