svn commit: r297140 - head/lib/libthr/thread

Konstantin Belousov kib at FreeBSD.org
Mon Mar 21 06:48:12 UTC 2016


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
 }
 


More information about the svn-src-all mailing list