From c73f0f9cf550fd7eedf97c56b48da51a6fa249e8 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 9 May 2011 12:54:47 +0000 Subject: [PATCH] eina: improve lock debugging. SVN revision: 59293 --- .../eina/src/include/eina_inline_lock_posix.x | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/legacy/eina/src/include/eina_inline_lock_posix.x b/legacy/eina/src/include/eina_inline_lock_posix.x index 7c957fe1b4..52c81b1751 100644 --- a/legacy/eina/src/include/eina_inline_lock_posix.x +++ b/legacy/eina/src/include/eina_inline_lock_posix.x @@ -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) {