summaryrefslogtreecommitdiffstats
path: root/sys/sys/mutex.h
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2007-03-09 22:41:01 +0000
committerjhb <jhb@FreeBSD.org>2007-03-09 22:41:01 +0000
commitf5e396934025920e30b32a3eef21d05548f16898 (patch)
tree343c44631b470578282dfd1c1d3fb73ed2833f3c /sys/sys/mutex.h
parentb470e17165153afeed8259afb043250b76f64e76 (diff)
downloadFreeBSD-src-f5e396934025920e30b32a3eef21d05548f16898.zip
FreeBSD-src-f5e396934025920e30b32a3eef21d05548f16898.tar.gz
Allow threads to atomically release rw and sx locks while waiting for an
event. Locking primitives that support this (mtx, rw, and sx) now each include their own foo_sleep() routine. - Rename msleep() to _sleep() and change it's 'struct mtx' object to a 'struct lock_object' pointer. _sleep() uses the recently added lc_unlock() and lc_lock() function pointers for the lock class of the specified lock to release the lock while the thread is suspended. - Add wrappers around _sleep() for mutexes (mtx_sleep()), rw locks (rw_sleep()), and sx locks (sx_sleep()). msleep() still exists and is now identical to mtx_sleep(), but it is deprecated. - Rename SLEEPQ_MSLEEP to SLEEPQ_SLEEP. - Rewrite much of sleep.9 to not be msleep(9) centric. - Flesh out the 'RETURN VALUES' section in sleep.9 and add an 'ERRORS' section. - Add __nonnull(1) to _sleep() and msleep_spin() so that the compiler will warn if you try to pass a NULL wait channel. The functions already have a KASSERT to that effect.
Diffstat (limited to 'sys/sys/mutex.h')
-rw-r--r--sys/sys/mutex.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/sys/mutex.h b/sys/sys/mutex.h
index cde6e44..a8d349f 100644
--- a/sys/sys/mutex.h
+++ b/sys/sys/mutex.h
@@ -339,6 +339,9 @@ extern struct mtx_pool *mtxpool_sleep;
#define mtx_trylock_flags(m, opts) \
_mtx_trylock((m), (opts), LOCK_FILE, LOCK_LINE)
+#define mtx_sleep(chan, mtx, pri, wmesg, timo) \
+ _sleep((chan), &(mtx)->mtx_object, (pri), (wmesg), (timo))
+
#define mtx_initialized(m) lock_initalized(&(m)->mtx_object)
#define mtx_owned(m) (((m)->mtx_lock & ~MTX_FLAGMASK) == (uintptr_t)curthread)
OpenPOWER on IntegriCloud