On Mon, May 01, 2017 at 06:59:45PM +0800, Paul Goyette wrote:
On Mon, 1 May 2017, Paul Goyette wrote:
even when using expensive checks, it's best not to make them
more expensive than is really necessary.
I understand and agree.
From my reading of sys/lockdebug.h, kern/subr_lockdebug.c and
kern/kern_mutex.c it would appear that mutex_ownable() can become
int
mutex_ownable(kmutex_t mtx)
{
#ifdef DEBUG
MUTEX_WANTLOCK(mtx)
#endif
return 1;
}
Taylor pointed out privately that this won't quite work, since
lockdebug_wantlock() currently updates ld->ld_{ex,sh}want counters.
The attached diffs get around this by making the "shared" argument to
lockdebug_wantlock() have three values instead of two. A positive value now
refers to shwant, a zero value to exwant, and a negative value means don't
touch either counter! The new MUTEX_TESTLOCK() macro uses -1 for the shared
argument.
Diffs attached (including man-page and sets-lists updates) - please let me
know if this is acceptable.
the man page still says mutex_ownable() acquires the mutex,
otherwise it looks fine.