Blame


1 7966faa9 2004-09-23 devnull #include "threadimpl.h"
2 7966faa9 2004-09-23 devnull
3 7966faa9 2004-09-23 devnull int _threadhighnrendez;
4 7966faa9 2004-09-23 devnull int _threadnrendez;
5 7966faa9 2004-09-23 devnull
6 7966faa9 2004-09-23 devnull void
7 7966faa9 2004-09-23 devnull _threadsleep(_Procrend *r)
8 7966faa9 2004-09-23 devnull {
9 7966faa9 2004-09-23 devnull Thread *t;
10 7966faa9 2004-09-23 devnull
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);
19 7966faa9 2004-09-23 devnull }
20 7966faa9 2004-09-23 devnull
21 7966faa9 2004-09-23 devnull void
22 7966faa9 2004-09-23 devnull _threadwakeup(_Procrend *r)
23 7966faa9 2004-09-23 devnull {
24 7966faa9 2004-09-23 devnull Thread *t;
25 7966faa9 2004-09-23 devnull
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);
32 7966faa9 2004-09-23 devnull return;
33 7966faa9 2004-09-23 devnull }
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);
38 7966faa9 2004-09-23 devnull }