1 7966faa9 2004-09-23 devnull #include "threadimpl.h"
3 7966faa9 2004-09-23 devnull int _threadhighnrendez;
4 7966faa9 2004-09-23 devnull int _threadnrendez;
7 7966faa9 2004-09-23 devnull _threadsleep(_Procrend *r)
9 7966faa9 2004-09-23 devnull Thread *t;
11 7966faa9 2004-09-23 devnull t = _threadgetproc()->thread;
12 7966faa9 2004-09-23 devnull r->arg = t;
13 7966faa9 2004-09-23 devnull t->nextstate = Rendezvous;
14 7966faa9 2004-09-23 devnull t->asleep = 1;
15 7966faa9 2004-09-23 devnull unlock(r->l);
16 7966faa9 2004-09-23 devnull _sched();
17 7966faa9 2004-09-23 devnull t->asleep = 0;
18 7966faa9 2004-09-23 devnull lock(r->l);
22 7966faa9 2004-09-23 devnull _threadwakeup(_Procrend *r)
24 7966faa9 2004-09-23 devnull Thread *t;
26 7966faa9 2004-09-23 devnull t = r->arg;
27 7966faa9 2004-09-23 devnull while(t->state == Running)
28 7966faa9 2004-09-23 devnull sleep(0);
29 7966faa9 2004-09-23 devnull lock(&t->proc->lock);
30 7966faa9 2004-09-23 devnull if(t->state == Dead){
31 7966faa9 2004-09-23 devnull unlock(&t->proc->lock);
34 7966faa9 2004-09-23 devnull assert(t->state == Rendezvous && t->asleep);
35 7966faa9 2004-09-23 devnull t->state = Ready;
36 7966faa9 2004-09-23 devnull _threadready(t);
37 7966faa9 2004-09-23 devnull unlock(&t->proc->lock);