diff options
author | jhb <jhb@FreeBSD.org> | 2005-09-15 19:05:37 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2005-09-15 19:05:37 +0000 |
commit | e535e11c9f1e82c6daa8b6af94249d2f8cc719c7 (patch) | |
tree | 1a97be74d31fd11ae0c4179f921efa5d4a11fa7a /sys/kern/subr_sleepqueue.c | |
parent | 4fbd998dffe50e8632d7713e024a655da034de2f (diff) | |
download | FreeBSD-src-e535e11c9f1e82c6daa8b6af94249d2f8cc719c7.zip FreeBSD-src-e535e11c9f1e82c6daa8b6af94249d2f8cc719c7.tar.gz |
- Add a new simple facility for marking the current thread as being in a
state where sleeping on a sleep queue is not allowed. The facility
doesn't support recursion but uses a simple private per-thread flag
(TDP_NOSLEEPING). The sleepq_add() function will panic if the flag is
set and INVARIANTS is enabled.
- Use this new facility to replace the g_xup and g_xdown mutexes that were
(ab)used to achieve similar behavior.
- Disallow sleeping in interrupt threads when invoking interrupt handlers.
MFC after: 1 week
Reviewed by: phk
Diffstat (limited to 'sys/kern/subr_sleepqueue.c')
-rw-r--r-- | sys/kern/subr_sleepqueue.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/subr_sleepqueue.c b/sys/kern/subr_sleepqueue.c index 44a2596..3def263 100644 --- a/sys/kern/subr_sleepqueue.c +++ b/sys/kern/subr_sleepqueue.c @@ -269,6 +269,10 @@ sleepq_add(void *wchan, struct mtx *lock, const char *wmesg, int flags) MPASS(td->td_sleepqueue != NULL); MPASS(wchan != NULL); + /* If this thread is not allowed to sleep, die a horrible death. */ + KASSERT(!(td->td_pflags & TDP_NOSLEEPING), + ("trying to sleep while sleeping is prohibited")); + /* Look up the sleep queue associated with the wait channel 'wchan'. */ sq = sleepq_lookup(wchan); |