diff options
| author | Dag-Erling Smørgrav <des@FreeBSD.org> | 2015-12-12 22:18:57 +0000 | 
|---|---|---|
| committer | Dag-Erling Smørgrav <des@FreeBSD.org> | 2015-12-12 22:18:57 +0000 | 
| commit | a7af7146c91c816cb83e0c5812eca7019531acb5 (patch) | |
| tree | 6e64b645522115b817ba7eabd4e4ce58f129e8c7 /testcode/checklocks.c | |
| parent | 835a7e7a4dd68819f7610dafdf9277d3852aef6a (diff) | |
Notes
Diffstat (limited to 'testcode/checklocks.c')
| -rw-r--r-- | testcode/checklocks.c | 25 | 
1 files changed, 18 insertions, 7 deletions
diff --git a/testcode/checklocks.c b/testcode/checklocks.c index 5815e4fd0887..dab98491e224 100644 --- a/testcode/checklocks.c +++ b/testcode/checklocks.c @@ -430,7 +430,7 @@ finish_acquire_lock(struct thr_check* thr, struct checked_lock* lock,   * @param timedfunc: the pthread_mutex_timedlock or similar function.   *	Uses absolute timeout value.   * @param arg: what to pass to tryfunc and timedlock. - * @param exclusive: if lock must be exlusive (only one allowed). + * @param exclusive: if lock must be exclusive (only one allowed).   * @param getwr: if attempts to get writelock (or readlock) for rwlocks.   */  static void  @@ -502,6 +502,8 @@ void  checklock_rdlock(enum check_lock_type type, struct checked_lock* lock,          const char* func, const char* file, int line)  { +	if(key_deleted) +		return;  	log_assert(type == check_lock_rwlock);  	checklock_lockit(type, lock, func, file, line, @@ -520,6 +522,8 @@ void  checklock_wrlock(enum check_lock_type type, struct checked_lock* lock,          const char* func, const char* file, int line)  { +	if(key_deleted) +		return;  	log_assert(type == check_lock_rwlock);  	checklock_lockit(type, lock, func, file, line,  		try_wr, timed_wr, &lock->u.rwlock, 0, 1); @@ -555,6 +559,8 @@ void  checklock_lock(enum check_lock_type type, struct checked_lock* lock,          const char* func, const char* file, int line)  { +	if(key_deleted) +		return;  	log_assert(type != check_lock_rwlock);  	switch(type) {  		case check_lock_mutex: @@ -577,8 +583,10 @@ void  checklock_unlock(enum check_lock_type type, struct checked_lock* lock,          const char* func, const char* file, int line)  { -	struct thr_check *thr = (struct thr_check*)pthread_getspecific( -		thr_debug_key); +	struct thr_check *thr; +	if(key_deleted) +		return; +	thr = (struct thr_check*)pthread_getspecific(thr_debug_key);  	checktype(type, lock, func, file, line);  	if(!thr) lock_error(lock, func, file, line, "no thread info"); @@ -755,7 +763,8 @@ static void  lock_debug_info(struct checked_lock* lock)  {  	if(!lock) return; -	log_info("+++ Lock %x, %d %d create %s %s %d", (int)lock,  +	log_info("+++ Lock %llx, %d %d create %s %s %d", +		(unsigned long long)(size_t)lock,   		lock->create_thread, lock->create_instance,   		lock->create_func, lock->create_file, lock->create_line);  	log_info("lock type: %s", @@ -790,8 +799,9 @@ thread_debug_info(struct thr_check* thr)  	struct checked_lock* l = NULL;  	if(!thr) return;  	log_info("pthread id is %x", (int)thr->id); -	log_info("thread func is %x", (int)thr->func); -	log_info("thread arg is %x (%d)", (int)thr->arg,  +	log_info("thread func is %llx", (unsigned long long)(size_t)thr->func); +	log_info("thread arg is %llx (%d)", +		(unsigned long long)(size_t)thr->arg,   		(thr->arg?*(int*)thr->arg:0));  	log_info("thread num is %d", thr->num);  	log_info("locks created %d", thr->locks_created); @@ -801,7 +811,8 @@ thread_debug_info(struct thr_check* thr)  	w = thr->waiting;  	f = thr->holding_first;  	l = thr->holding_last; -	log_info("thread waiting for a lock: %s %x", w?"yes":"no", (int)w); +	log_info("thread waiting for a lock: %s %llx", w?"yes":"no", +		(unsigned long long)(size_t)w);  	lock_debug_info(w);  	log_info("thread holding first: %s, last: %s", f?"yes":"no",   		l?"yes":"no");  | 
