#include <9pm/u.h> #include <9pm/libc.h> #include <9pm/ns.h> void rendsleep(Rendez *r, int (*fn)(void*), void *arg) { lock(&r->lk); assert(r->p == nil); if((*fn)(arg)){ unlock(&r->lk); return; } r->p = getproc(); unlock(&r->lk); nap(); } Proc* rendwakeup(Rendez *r) { Proc *p; lock(&r->lk); p = r->p; r->p = nil; unlock(&r->lk); if(p) wake(p); return p; }