diff options
author | 2013-11-18 23:09:46 +0000 | |
---|---|---|
committer | 2013-11-18 23:09:46 +0000 | |
commit | fefa8dd76788a334698832ebc1dbc8518924b3c0 (patch) | |
tree | 184efc12ed90f2320d30988856d1076ab15724c0 /sys | |
parent | Enable MSI on the remaining chipsets. (diff) | |
download | wireguard-openbsd-fefa8dd76788a334698832ebc1dbc8518924b3c0.tar.xz wireguard-openbsd-fefa8dd76788a334698832ebc1dbc8518924b3c0.zip |
hack in a global rendezvous for interprocess semaphores to use
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/kern_synch.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c index 9edfc5866a4..f1e5c8f4649 100644 --- a/sys/kern/kern_synch.c +++ b/sys/kern/kern_synch.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_synch.c,v 1.109 2013/11/09 06:52:15 guenther Exp $ */ +/* $OpenBSD: kern_synch.c,v 1.110 2013/11/18 23:09:46 tedu Exp $ */ /* $NetBSD: kern_synch.c,v 1.37 1996/04/22 01:38:37 christos Exp $ */ /* @@ -423,6 +423,7 @@ thrsleep_unlock(void *lock, int lockflags) return (error); } +static int magicnumber; int thrsleep(struct proc *p, struct sys___thrsleep_args *v) @@ -486,9 +487,13 @@ thrsleep(struct proc *p, struct sys___thrsleep_args *v) if (p->p_thrslpid == 0) error = 0; - else - error = tsleep(&p->p_thrslpid, PUSER | PCATCH, "thrsleep", + else { + void *sleepaddr = &p->p_thrslpid; + if (ident == -1) + sleepaddr = &magicnumber; + error = tsleep(sleepaddr, PUSER | PCATCH, "thrsleep", (int)to_ticks); + } out: p->p_thrslpid = 0; @@ -539,6 +544,8 @@ sys___thrwakeup(struct proc *p, void *v, register_t *retval) if (ident == 0) *retval = EINVAL; + else if (ident == -1) + wakeup(&magicnumber); else { TAILQ_FOREACH(q, &p->p_p->ps_threads, p_thr_link) { if (q->p_thrslpid == ident) { |