eina: improve lock debugging.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 9 May 2011 12:54:47 +0000 (12:54 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 9 May 2011 12:54:47 +0000 (12:54 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/eina@59293 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/include/eina_inline_lock_posix.x

index 7c957fe..52c81b1 100644 (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)
 {