Author: kib
Date: Mon Mar 21 06:48:11 2016
New Revision: 297140
URL: https://svnweb.freebsd.org/changeset/base/297140

Log:
  Provide more information on failing checks in mutex_assert_is_owned()
  and mutex_assert_not_owned().  snprintf() use in this context should
  be safe.
  
  Sponsored by: The FreeBSD Foundation

Modified:
  head/lib/libthr/thread/thr_mutex.c

Modified: head/lib/libthr/thread/thr_mutex.c
==============================================================================
--- head/lib/libthr/thread/thr_mutex.c  Mon Mar 21 06:46:16 2016        
(r297139)
+++ head/lib/libthr/thread/thr_mutex.c  Mon Mar 21 06:48:11 2016        
(r297140)
@@ -124,8 +124,14 @@ mutex_assert_is_owned(struct pthread_mut
 {
 
 #if defined(_PTHREADS_INVARIANTS)
-       if (__predict_false(m->m_qe.tqe_prev == NULL))
-               PANIC("mutex is not on list");
+       if (__predict_false(m->m_qe.tqe_prev == NULL)) {
+               char msg[128];
+               snprintf(msg, sizeof(msg),
+                   "mutex %p own %#x %#x is not on list %p %p",
+                   m, m->m_lock.m_owner, m->m_owner, m->m_qe.tqe_prev,
+                   m->m_qe.tqe_next);
+               PANIC(msg);
+       }
 #endif
 }
 
@@ -135,8 +141,14 @@ mutex_assert_not_owned(struct pthread_mu
 
 #if defined(_PTHREADS_INVARIANTS)
        if (__predict_false(m->m_qe.tqe_prev != NULL ||
-           m->m_qe.tqe_next != NULL))
-               PANIC("mutex is on list");
+           m->m_qe.tqe_next != NULL)) {
+               char msg[128];
+               snprintf(msg, sizeof(msg),
+                   "mutex %p own %#x %#x is on list %p %p",
+                   m, m->m_lock.m_owner, m->m_owner, m->m_qe.tqe_prev,
+                   m->m_qe.tqe_next);
+               PANIC(msg);
+       }
 #endif
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to