| plan 9 kernel history: overview | file list | diff list |
1990/1101/port/proc.c (diff list | history)
| 1990/0801/sys/src/9/port/proc.c:343,349 – 1990/1101/sys/src/9/port/proc.c:343,402 (short | long | prev | next) | ||
|
Move broken process code into new addbroken. Add freebroken.
rsc Mon Mar 20 17:14:05 2006 | ||
| 1990/0227 | return 1; } | |
| 1990/1101 | /* * weird thing: keep at most NBROKEN around */ #define NBROKEN 4 struct{ Lock; int n; Proc *p[NBROKEN]; }broken; | |
| 1990/0227 | void | |
| 1990/1101 | addbroken(Proc *c) { int b; lock(&broken); if(broken.n == NBROKEN){ ready(broken.p[0]); memcpy(&broken.p[0], &broken.p[1], sizeof(Proc*)*(NBROKEN-1)); --broken.n; } broken.p[broken.n++] = c; unlock(&broken); c->state = Broken; sched(); /* until someone lets us go */ lock(&broken); for(b=0; b<NBROKEN; b++) if(broken.p[b] == c){ broken.n--; memcpy(&broken.p[b], &broken.p[b+1], sizeof(Proc*)*(NBROKEN-(b+1))); break; } unlock(&broken); } int freebroken(void) { int n; lock(&broken); n = broken.n; while(broken.n > 0){ ready(broken.p[0]); memcpy(&broken.p[0], &broken.p[1], sizeof(Proc*)*(NBROKEN-1)); --broken.n; } unlock(&broken); return n; } void | |
| 1990/0227 | pexit(char *s, int freemem) { char status[64]; | |
| 1990/0801/sys/src/9/port/proc.c:418,452 – 1990/1101/sys/src/9/port/proc.c:471,477 | ||
| 1990/0227 | } out: if(!freemem){ | |
| 1990/0509 |
| |
| 1990/03081 |
| |
| 1990/0227 |
| |
| 1990/0509 |
| |
| 1990/1101 | addbroken(c); | |
| 1990/0227 | freesegs(-1); | |
| 1990/03081 | closepgrp(c->pgrp); | |
| 1990/0227 | close(u->dot); | |