diff options
author | pjd <pjd@FreeBSD.org> | 2004-02-04 08:14:58 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2004-02-04 08:14:58 +0000 |
commit | a976b835f9d45fec88950a40b88cbc40a3396c3d (patch) | |
tree | fb16ab4364866d98bee657c2b36cec6000386ea4 /sys/kern | |
parent | 35af001226a7c26bdef63bfb05ed4596ab82306e (diff) | |
download | FreeBSD-src-a976b835f9d45fec88950a40b88cbc40a3396c3d.zip FreeBSD-src-a976b835f9d45fec88950a40b88cbc40a3396c3d.tar.gz |
Allow assert that the current thread does not hold the sx(9) lock.
Reviewed by: jhb
In cooperation with: juli, jhb
Approved by: jhb, scottl (mentor)
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_sx.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/kern/kern_sx.c b/sys/kern/kern_sx.c index fd723ed..e744f31 100644 --- a/sys/kern/kern_sx.c +++ b/sys/kern/kern_sx.c @@ -344,6 +344,17 @@ _sx_assert(struct sx *sx, int what, const char *file, int line) sx->sx_object.lo_name, file, line); mtx_unlock(sx->sx_lock); break; + case SX_UNLOCKED: +#ifdef WITNESS + witness_assert(&sx->sx_object, what, file, line); +#else + mtx_lock(sx->sx_lock); + if (sx->sx_cnt != 0 && sx->sx_xholder == curthread) + printf("Lock %s locked @ %s:%d\n", + sx->sx_object.lo_name, file, line); + mtx_unlock(sx->sx_lock); +#endif + break; default: panic("Unknown sx lock assertion: %d @ %s:%d", what, file, line); |