socsvn commit: r239605 - in soc2012/gmiller/locking-head: . lib/libwitness

gmiller at FreeBSD.org gmiller at FreeBSD.org
Fri Jul 20 03:40:49 UTC 2012


Author: gmiller
Date: Fri Jul 20 03:40:46 2012
New Revision: 239605
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=239605

Log:
   r239632 at FreeBSD-dev:  root | 2012-07-15 12:32:28 -0500
   Assign default names to locks.

Modified:
  soc2012/gmiller/locking-head/   (props changed)
  soc2012/gmiller/locking-head/lib/libwitness/lockinfo.c
  soc2012/gmiller/locking-head/lib/libwitness/witness.h
  soc2012/gmiller/locking-head/lib/libwitness/wrappers.c

Modified: soc2012/gmiller/locking-head/lib/libwitness/lockinfo.c
==============================================================================
--- soc2012/gmiller/locking-head/lib/libwitness/lockinfo.c	Fri Jul 20 03:10:36 2012	(r239604)
+++ soc2012/gmiller/locking-head/lib/libwitness/lockinfo.c	Fri Jul 20 03:40:46 2012	(r239605)
@@ -27,6 +27,8 @@
 
 #include "witness.h"
 
+#define MAX_DEFAULT_NAME_LENGTH (80)
+
 static SLIST_HEAD(lock_info_head, lock_info) lock_info_head =
     SLIST_HEAD_INITIALIZER(lock_info_head);
 
@@ -106,3 +108,15 @@
 		strcpy(info->name, name);
 	}
 }
+
+void
+check_default_name(struct lock_info *lock, const char *prefix)
+{
+	if (lock->name == NULL) {
+		lock->name = malloc(MAX_DEFAULT_NAME_LENGTH + 1);
+		if (lock->name != NULL) {
+			snprintf(lock->name, MAX_DEFAULT_NAME_LENGTH, "%s%p",
+				 prefix, lock->lock);
+		}
+	}
+}

Modified: soc2012/gmiller/locking-head/lib/libwitness/witness.h
==============================================================================
--- soc2012/gmiller/locking-head/lib/libwitness/witness.h	Fri Jul 20 03:10:36 2012	(r239604)
+++ soc2012/gmiller/locking-head/lib/libwitness/witness.h	Fri Jul 20 03:40:46 2012	(r239605)
@@ -30,6 +30,7 @@
 #include <errno.h>
 #include <pthread.h>
 #include <pthread_np.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -63,3 +64,4 @@
 void		destroy_lock(void *lock);
 int		blessed(struct lock_info *first, struct lock_info *second);
 void		reset_lock_info(void);
+void		check_default_name(struct lock_info *lock, const char *prefix);

Modified: soc2012/gmiller/locking-head/lib/libwitness/wrappers.c
==============================================================================
--- soc2012/gmiller/locking-head/lib/libwitness/wrappers.c	Fri Jul 20 03:10:36 2012	(r239604)
+++ soc2012/gmiller/locking-head/lib/libwitness/wrappers.c	Fri Jul 20 03:40:46 2012	(r239605)
@@ -54,12 +54,16 @@
 pthread_mutex_lock(pthread_mutex_t *mutex)
 {
 	int ret;
+	struct lock_info *lock;
 
 	_pthread_mutex_lock(&witness_mtx);
 
+	lock = lookup_lock(mutex);
+	check_default_name(lock, "mutex_");
+
 	ret = _pthread_mutex_lock(mutex);
 	if (mutex != &witness_mtx && ret == 0) {
-		add_lock(lookup_lock(mutex));
+		add_lock(lock);
 	}
 
 	_pthread_mutex_unlock(&witness_mtx);
@@ -71,12 +75,16 @@
 pthread_mutex_trylock(pthread_mutex_t *mutex)
 {
 	int ret;
+	struct lock_info *lock;
 
 	_pthread_mutex_lock(&witness_mtx);
 
+	lock = lookup_lock(mutex);
+	check_default_name(lock, "mutex_");
+
 	ret = _pthread_mutex_trylock(mutex);
 	if (mutex != &witness_mtx && ret == 0) {
-		add_lock(lookup_lock(mutex));
+		add_lock(lock);
 	}
 
 	_pthread_mutex_unlock(&witness_mtx);
@@ -88,12 +96,16 @@
 pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *ts)
 {
 	int ret;
+	struct lock_info *lock;
 
 	_pthread_mutex_lock(&witness_mtx);
 
+	lock = lookup_lock(mutex);
+	check_default_name(lock, "mutex_");
+
 	ret = _pthread_mutex_timedlock(mutex, ts);
 	if (mutex != &witness_mtx && ret == 0) {
-		add_lock(lookup_lock(mutex));
+		add_lock(lock);
 	}
 
 	_pthread_mutex_unlock(&witness_mtx);
@@ -137,12 +149,16 @@
 pthread_rwlock_rdlock(pthread_rwlock_t *rwlock)
 {
 	int ret;
+	struct lock_info *lock;
 
 	_pthread_mutex_lock(&witness_mtx);
 
+	lock = lookup_lock(rwlock);
+	check_default_name(lock, "rwlock_");
+
 	ret = _pthread_rwlock_rdlock(rwlock);
 	if (ret == 0) {
-		add_lock(lookup_lock(rwlock));
+		add_lock(lock);
 	}
 
 	_pthread_mutex_unlock(&witness_mtx);
@@ -154,12 +170,16 @@
 pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock)
 {
 	int ret;
+	struct lock_info *lock;
 
 	_pthread_mutex_lock(&witness_mtx);
 
+	lock = lookup_lock(rwlock);
+	check_default_name(lock, "rwlock_");
+
 	ret = _pthread_rwlock_tryrdlock(rwlock);
 	if (ret == 0) {
-		add_lock(lookup_lock(rwlock));
+		add_lock(lock);
 	}
 
 	_pthread_mutex_unlock(&witness_mtx);
@@ -171,12 +191,16 @@
 pthread_rwlock_timedrdlock(pthread_rwlock_t *rwlock, const struct timespec *ts)
 {
 	int ret;
+	struct lock_info *lock;
 
 	_pthread_mutex_lock(&witness_mtx);
 
+	lock = lookup_lock(rwlock);
+	check_default_name(lock, "rwlock_");
+
 	ret = _pthread_rwlock_timedrdlock(rwlock, ts);
 	if (ret == 0) {
-		add_lock(lookup_lock(rwlock));
+		add_lock(lock);
 	}
 
 	_pthread_mutex_unlock(&witness_mtx);
@@ -188,12 +212,16 @@
 pthread_rwlock_wrlock(pthread_rwlock_t *rwlock)
 {
 	int ret;
+	struct lock_info *lock;
 
 	_pthread_mutex_lock(&witness_mtx);
 
+	lock = lookup_lock(rwlock);
+	check_default_name(lock, "rwlock_");
+
 	ret = _pthread_rwlock_wrlock(rwlock);
 	if (ret == 0) {
-		add_lock(lookup_lock(rwlock));
+		add_lock(lock);
 	}
 
 	_pthread_mutex_unlock(&witness_mtx);
@@ -205,12 +233,16 @@
 pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock)
 {
 	int ret;
+	struct lock_info *lock;
 
 	_pthread_mutex_lock(&witness_mtx);
 
+	lock = lookup_lock(rwlock);
+	check_default_name(lock, "rwlock_");
+
 	ret = _pthread_rwlock_trywrlock(rwlock);
 	if (ret == 0) {
-		add_lock(lookup_lock(rwlock));
+		add_lock(lock);
 	}
 
 	_pthread_mutex_unlock(&witness_mtx);
@@ -222,12 +254,16 @@
 pthread_rwlock_timedwrlock(pthread_rwlock_t *rwlock, const struct timespec *ts)
 {
 	int ret;
+	struct lock_info *lock;
 
 	_pthread_mutex_lock(&witness_mtx);
 
+	lock = lookup_lock(rwlock);
+	check_default_name(lock, "rwlock_");
+
 	ret = _pthread_rwlock_timedwrlock(rwlock, ts);
 	if (ret == 0) {
-		add_lock(lookup_lock(rwlock));
+		add_lock(lock);
 	}
 
 	_pthread_mutex_unlock(&witness_mtx);
@@ -271,12 +307,16 @@
 pthread_spin_lock(pthread_spinlock_t *spin)
 {
 	int ret;
+	struct lock_info *lock;
 
 	_pthread_mutex_lock(&witness_mtx);
 
+	lock = lookup_lock(spin);
+	check_default_name(lock, "spinlock_");
+
 	ret = _pthread_spin_lock(spin);
 	if (ret == 0) {
-		add_lock(lookup_lock(spin));
+		add_lock(lock);
 	}
 
 	_pthread_mutex_unlock(&witness_mtx);
@@ -288,12 +328,16 @@
 pthread_spin_trylock(pthread_spinlock_t *spin)
 {
 	int ret;
+	struct lock_info *lock;
 
 	_pthread_mutex_lock(&witness_mtx);
 
+	lock = lookup_lock(spin);
+	check_default_name(lock, "spinlock_");
+
 	ret = _pthread_spin_lock(spin);
 	if (ret == 0) {
-		add_lock(lookup_lock(spin));
+		add_lock(lock);
 	}
 
 	_pthread_mutex_unlock(&witness_mtx);


More information about the svn-soc-all mailing list