From 52685f417729ae0089f640bc756c8160830c8618 Mon Sep 17 00:00:00 2001 From: Jonathan Gray Date: Fri, 15 Mar 2013 15:22:54 +1100 Subject: have wakeup return the number of processes woken up --- sys/kern/kern_synch.c | 14 +++++++++----- sys/sys/systm.h | 4 ++-- 2 files changed, 11 insertions(+), 7 deletions(-) (limited to 'sys') diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c index f1db615348b..084a194c847 100644 --- a/sys/kern/kern_synch.c +++ b/sys/kern/kern_synch.c @@ -350,13 +350,13 @@ unsleep(struct proc *p) /* * Make a number of processes sleeping on the specified identifier runnable. */ -void +int wakeup_n(const volatile void *ident, int n) { struct slpque *qp; struct proc *p; struct proc *pnext; - int s; + int s, woken = 0; SCHED_LOCK(s); qp = &slpque[LOOKUP(ident)]; @@ -370,20 +370,24 @@ wakeup_n(const volatile void *ident, int n) --n; p->p_wchan = 0; TAILQ_REMOVE(qp, p, p_runq); - if (p->p_stat == SSLEEP) + if (p->p_stat == SSLEEP) { setrunnable(p); + woken++; + } } } SCHED_UNLOCK(s); + + return (woken); } /* * Make all processes sleeping on the specified identifier runnable. */ -void +int wakeup(const volatile void *chan) { - wakeup_n(chan, -1); + return (wakeup_n(chan, -1)); } int diff --git a/sys/sys/systm.h b/sys/sys/systm.h index dd3823db0c8..bd5a39f1d5d 100644 --- a/sys/sys/systm.h +++ b/sys/sys/systm.h @@ -250,8 +250,8 @@ int sleep_finish_signal(struct sleep_state *); void sleep_queue_init(void); struct mutex; -void wakeup_n(const volatile void *, int); -void wakeup(const volatile void *); +int wakeup_n(const volatile void *, int); +int wakeup(const volatile void *); #define wakeup_one(c) wakeup_n((c), 1) int tsleep(const volatile void *, int, const char *, int); int msleep(const volatile void *, struct mutex *, int, const char*, int); -- cgit v1.2.3