commit - f9aa99c72e86fa546a504d34ade4b3ca3164d9da
commit + 65de82a30f67103eb9ec1cbc9ab62725b03e7423
blob - bdb9ad6b21c9c2957eecf76af1679905c83fe9f5
blob + cfc76d677d87cc52e62d79ee94cec7b9422d2ae7
--- src/libthread/sched.c
+++ src/libthread/sched.c
{
Proc *p;
Thread *t;
- extern void ignusr1(void), _threaddie(int);
- ignusr1();
+ extern void ignusr1(int), _threaddie(int);
+ ignusr1(1);
signal(SIGTERM, _threaddie);
p = arg;
q = &p->ready;
relock:
lock(&p->readylock);
- if(q->head == nil){
+ if(p->nsched%128 == 0){
+ /* clean up children */
e = errno;
if((c = _threadwaitchan) != nil){
if(c->n <= c->s){
free(w);
}
errno = e;
+ }
+ if(q->head == nil){
if(p->idle){
if(p->idle->state != Ready){
fprint(2, "everyone is asleep\n");
t->state = Running;
t->nextstate = Ready;
_gotolabel(&t->sched);
+ for(;;);
}
}