## diffname port/pgrp.c 1990/0227 ## diff -e /dev/null /n/bootesdump/1990/0227/sys/src/9/mips/pgrp.c 0a #include "u.h" #include "lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "errno.h" struct{ Lock; Pgrp *free; ulong pgrpid; }pgrpalloc; struct{ Lock; Mount *free; ulong mountid; }mountalloc; void pgrpinit(void) { int i; Pgrp *p; Mount *m; pgrpalloc.free = ialloc(conf.npgrp*sizeof(Pgrp), 0); p = pgrpalloc.free; for(i=0; inext = p+1; p->mtab = ialloc(conf.nmtab*sizeof(Mtab), 0); p->etab = ialloc(conf.npgenv*sizeof(Envp*), 0); } p->next = 0; mountalloc.free = ialloc(conf.nmount*sizeof(Mount), 0); m = mountalloc.free; for(i=0; inext = m+1; m->next = 0; } Pgrp* newpgrp(void) { Pgrp *p; loop: lock(&pgrpalloc); if(p = pgrpalloc.free){ /* assign = */ pgrpalloc.free = p->next; p->ref = 1; p->pgrpid = ++pgrpalloc.pgrpid; p->nmtab = 0; p->nenv = 0; unlock(&pgrpalloc); return p; } unlock(&pgrpalloc); print("no pgrps\n"); if(u == 0) panic("newpgrp"); u->p->state = Wakeme; alarm(1000, wakeme, u->p); sched(); goto loop; } void closepgrp(Pgrp *p) { int i; Mtab *m; Envp *ep; if(decref(p) == 0){ m = p->mtab; for(i=0; inmtab; i++,m++) if(m->c){ close(m->c); closemount(m->mnt); } ep = p->etab; for(i=0; inenv; i++,ep++) if(ep->env) envpgclose(ep->env); lock(&pgrpalloc); p->next = pgrpalloc.free; pgrpalloc.free = p; unlock(&pgrpalloc); } } Mount* newmount(void) { Mount *m; loop: lock(&mountalloc); if(m = mountalloc.free){ /* assign = */ mountalloc.free = m->next; m->ref = 1; m->mountid = ++mountalloc.mountid; unlock(&mountalloc); return m; } unlock(&mountalloc); print("no mounts\n"); if(u == 0) panic("newmount"); u->p->state = Wakeme; alarm(1000, wakeme, u->p); sched(); goto loop; } void closemount(Mount *m) { lock(m); if(m->ref == 1){ close(m->c); if(m->next) closemount(m->next); unlock(m); lock(&mountalloc); m->mountid = 0; m->next = mountalloc.free; mountalloc.free = m; unlock(&mountalloc); return; } m->ref--; unlock(m); } void pgrpcpy(Pgrp *to, Pgrp *from) { int i; Mtab *m; Envp *ep; Env *e; lock(from); memcpy(to->user, from->user, NAMELEN); memcpy(to->mtab, from->mtab, from->nmtab*sizeof(Mtab)); to->nmtab = from->nmtab; m = to->mtab; for(i=0; inmtab; i++,m++) if(m->c){ incref(m->c); lock(m->mnt); m->mnt->ref++; unlock(m->mnt); } to->nenv = from->nenv; ep = to->etab; for(i=0; inenv; i++,ep++){ ep->chref = 0; e = ep->env = from->etab[i].env; if(e){ lock(e); if(waserror()){ unlock(e); unlock(from); ep->env = 0; nexterror(); } /* * If pgrp being forked has an open channel * on this env, it may write it after the fork * so make a copy now. * Don't worry about other pgrps, because they * will copy if they are about to write. */ if(from->etab[i].chref){ ep->env = copyenv(e, 0); unlock(ep->env); }else e->pgref++; poperror(); unlock(e); } } unlock(from); } . ## diffname port/pgrp.c 1990/0321 ## diff -e /n/bootesdump/1990/0227/sys/src/9/mips/pgrp.c /n/bootesdump/1990/0321/sys/src/9/mips/pgrp.c 125c if(m->c) close(m->c); . ## diffname port/pgrp.c 1990/0810 ## diff -e /n/bootesdump/1990/0321/sys/src/9/mips/pgrp.c /n/bootesdump/1990/0810/sys/src/9/mips/pgrp.c 113a print("%s %s\n", u->p->pgrp->user, u->p->text); . ## diffname port/pgrp.c 1990/0825 ## diff -e /n/bootesdump/1990/0810/sys/src/9/mips/pgrp.c /n/bootesdump/1990/0825/sys/src/9/mips/pgrp.c 114d 35c p[-1].next = 0; . 30c for(i=0; inext = 0; . ## diffname port/pgrp.c 1990/1110 ## diff -e /n/bootesdump/1990/0928/sys/src/9/mips/pgrp.c /n/bootesdump/1990/1110/sys/src/9/mips/pgrp.c 91a unlock(&p->debug); . 78a lock(&p->debug); p->pgrpid = -1; . 45a pgrptab(int i) { return &pgrpalloc.arena[i]; } void pgrpnote(Pgrp *pg, char *a, long n, int flag) { int i; Proc *p; char buf[ERRLEN]; if(n >= ERRLEN-1) error(0, Etoobig); if(n>=4 && strncmp(a, "sys:", 4)==0) error(0, Ebadarg); memcpy(buf, a, n); buf[n] = 0; p = proctab(0); for(i=0; ipgrp == pg){ lock(&p->debug); if(p->pid==0 || p->pgrp!=pg){ unlock(&p->debug); continue; } if(waserror()){ unlock(&p->debug); continue; } postnote(p, 0, buf, flag); unlock(&p->debug); } } } Pgrp* . 30a p->index = i; . 27c pgrpalloc.arena = ialloc(conf.npgrp*sizeof(Pgrp), 0); pgrpalloc.free = pgrpalloc.arena; . 9a Pgrp *arena; . ## diffname port/pgrp.c 1990/11211 ## diff -e /n/bootesdump/1990/1110/sys/src/9/mips/pgrp.c /n/bootesdump/1990/11211/sys/src/9/mips/pgrp.c 64c error(Ebadarg); . 62c error(Etoobig); . ## diffname port/pgrp.c 1991/0125 ## diff -e /n/bootesdump/1990/1210/sys/src/9/mips/pgrp.c /n/bootesdump/1991/0125/sys/src/9/port/pgrp.c 79d 75,77c if(!waserror()){ postnote(p, 0, buf, flag); poperror(); . ## diffname port/pgrp.c 1991/0212 ## diff -e /n/bootesdump/1991/0125/sys/src/9/port/pgrp.c /n/bootesdump/1991/0212/sys/src/9/port/pgrp.c 133c qunlock(&p->debug); . 118c qlock(&p->debug); . ## diffname port/pgrp.c 1991/0318 ## diff -e /n/bootesdump/1991/0212/sys/src/9/port/pgrp.c /n/bootesdump/1991/0318/sys/src/9/port/pgrp.c 193,194c memmove(to->user, from->user, NAMELEN); memmove(to->mtab, from->mtab, from->nmtab*sizeof(Mtab)); . 65c memmove(buf, a, n); . ## diffname port/pgrp.c 1991/0514 ## diff -e /n/bootesdump/1991/0318/sys/src/9/port/pgrp.c /n/bootesdump/1991/0514/sys/src/9/port/pgrp.c 233a unlock(from); } void pgrpcpy(Pgrp *to, Pgrp *from) { int i; Mtab *m; lock(from); memmove(to->user, from->user, NAMELEN); memmove(to->mtab, from->mtab, from->nmtab*sizeof(Mtab)); to->nmtab = from->nmtab; m = to->mtab; for(i=0; inmtab; i++,m++) if(m->c){ incref(m->c); lock(m->mnt); m->mnt->ref++; unlock(m->mnt); } . 193,204d 190a int i; . 187,188d 185c envcpy(Pgrp *to, Pgrp *from) . ## diffname port/pgrp.c 1991/0705 ## diff -e /n/bootesdump/1991/0514/sys/src/9/port/pgrp.c /n/bootesdump/1991/0705/sys/src/9/port/pgrp.c 185c envcpy(Egrp *to, Egrp *from) . 137a void closeegrp(Egrp *e) { Envp *ep; int i; if(decref(e) == 0) { ep = e->etab; for(i=0; inenv; i++,ep++) if(ep->env) envpgclose(ep->env); lock(&egrpalloc); e->next = egrpalloc.free; egrpalloc.free = e; unlock(&egrpalloc); } } void closefgrp(Fgrp *f) { int i; Chan *c; if(decref(f) == 0) { for(i = 0; i <= f->maxfd; i++) if(c = f->fd[i]) close(c); lock(&fgrpalloc); f->next = fgrpalloc.free; fgrpalloc.free = f; unlock(&fgrpalloc); } } . 126,129d 115d 107d 103c panic("resched"); . 100,101c } Egrp* newegrp(void) { Egrp *e; for(;;) { lock(&egrpalloc); if(e = egrpalloc.free) { egrpalloc.free = e->next; e->ref = 1; e->nenv = 0; unlock(&egrpalloc); return e; } unlock(&egrpalloc); resrcwait("no envgrps"); } } Fgrp* newfgrp(void) { Fgrp *f; for(;;) { lock(&fgrpalloc); if(f = fgrpalloc.free) { fgrpalloc.free = f->next; f->ref = 1; f->maxfd = 0; memset(f->fd, 0, sizeof(f->fd)); unlock(&fgrpalloc); return f; } unlock(&fgrpalloc); resrcwait("no filegrps"); } } Fgrp* dupfgrp(Fgrp *f) { Fgrp *new; Chan *c; int i; new = newfgrp(); new->maxfd = f->maxfd; for(i = 0; i <= f->maxfd; i++) if(c = f->fd[i]){ incref(c); new->fd[i] = c; } return new; } void resrcwait(char *reason) { print("%s\n", reason); . 98c resrcwait("no pgrps"); . 89,96c for(;;) { lock(&pgrpalloc); if(p = pgrpalloc.free){ pgrpalloc.free = p->next; p->ref = 1; p->pgrpid = ++pgrpalloc.pgrpid; p->nmtab = 0; unlock(&pgrpalloc); return p; } . 42,43c fgrpalloc.free = ialloc(conf.nproc*sizeof(Fgrp), 0); fe = &fgrpalloc.free[conf.nproc-1]; for(f = fgrpalloc.free; f < fe; f++) f->next = f+1; f->next = 0; mountalloc.free = ialloc(conf.nmount*sizeof(Mount), 0); em = &mountalloc.free[conf.nmount-1]; for(m = mountalloc.free; m < em; m++) . 40c egrpalloc.free = ialloc(conf.npgrp*sizeof(Egrp), 0); ee = &egrpalloc.free[conf.npgrp]; for(e = egrpalloc.free; e < ee; e++) { e->next = e+1; e->etab = ialloc(conf.npgenv*sizeof(Envp*), 0); } e[-1].next = 0; . 36d 26c Egrp *e, *ee; Fgrp *f, *fe; Mount *m, *em; . 22c grpinit(void) . 14a struct { Lock; Egrp *free; }egrpalloc; struct { Lock; Fgrp *free; }fgrpalloc; . 8c struct { . ## diffname port/pgrp.c 1991/0710 ## diff -e /n/bootesdump/1991/0705/sys/src/9/port/pgrp.c /n/bootesdump/1991/0710/sys/src/9/port/pgrp.c 194c panic("resrcwait"); . 192c if(reason) print("%s\n", reason); . ## diffname port/pgrp.c 1991/0806 ## diff -e /n/bootesdump/1991/0710/sys/src/9/port/pgrp.c /n/bootesdump/1991/0806/sys/src/9/port/pgrp.c 122a memset(p->rendhash, 0, sizeof(p->rendhash)); . ## diffname port/pgrp.c 1991/1011 ## diff -e /n/bootesdump/1991/0806/sys/src/9/port/pgrp.c /n/bootesdump/1991/1011/sys/src/9/port/pgrp.c 367c Mhead * newmnthead(void) { Mhead *mh, *f, *e; for(;;) { lock(&mountalloc); if(mh = mountalloc.mhfree) { /* Assign '=' */ mountalloc.mhfree = mh->hash; unlock(&mountalloc); mh->hash = 0; mh->mount = 0; return mh; } unlock(&mountalloc); mh = (Mhead*)VA(kmap(newpage(0, 0, 0))); e = &mh[(BY2PG/sizeof(Mhead))-1]; for(f = mh; f < e; f++) f->hash = f+1; lock(&mountalloc); e->hash = mountalloc.mhfree; mountalloc.mhfree = mh; unlock(&mountalloc); } } void mntheadfree(Mhead *mh) { lock(&mountalloc); mh->hash = mountalloc.mhfree; mountalloc.mhfree = mh; unlock(&mountalloc); } void mountfree(Mount *m) { Mount *f; for(f = m; f->next; f = f->next) close(f->to); close(f->to); lock(&mountalloc); f->next = mountalloc.free; mountalloc.free = m; unlock(&mountalloc); . 365a } runlock(&from->ns); } . 356,364c rlock(&from->ns); e = &from->mnthash[MNTHASH]; for(h = from->mnthash; h < e; h++) { for(f = *h; f; f = f->hash) { mh = newmnthead(); mh->from = f->from; incref(mh->from); l = &MOUNTH(to, mh->from); mh->hash = *l; *l = mh; link = &mh->mount; for(m = f->mount; m; m = m->next) { n = newmount(mh, m->to); *link = n; link = &n->next; } . 354d 351,352c Mhead **h, **e, *f, **l, *mh; Mount *n, *m, **link; . 304,305d 302d 298,299c e->next = mountalloc.free; . 287,296c m = (Mount*)VA(kmap(newpage(0, 0, 0))); e = &m[(BY2PG/sizeof(Mount))-1]; for(f = m; f < e; f++) f->next = f+1; . 275,285d 267,273c for(;;) { lock(&mountalloc); if(m = mountalloc.free){ /* assign = */ mountalloc.free = m->next; m->mountid = ++mountalloc.mountid; unlock(&mountalloc); m->next = 0; m->head = mh; m->to = to; incref(to); return m; } . 265c Mount *m, *f, *e; . 263c newmount(Mhead *mh, Chan *to) . 216a } . 211,215c e = &p->mnthash[MNTHASH]; for(h = p->mnthash; h < e; h++) { for(f = *h; f; f = next) { close(f->from); mountfree(f->mount); next = f->hash; mntheadfree(f); . 205,207c Mhead **h, **e, *f, *next; . 123a memset(p->mnthash, 0, sizeof(p->mnthash)); . 122d 67,72d 50d 47c for(i=0; iev); nenv = from->nenv; to->nenv = nenv; te = to->etab; fe = from->etab; for(i=0; i < nenv; i++, te++, fe++) envpgcopy(te, fe); qunlock(&from->ev); . 295,297c Env *te, *fe; int i, nenv; . 236,237c eg->next = egrpalloc.free; egrpalloc.free = eg; . 230,234c if(decref(eg) == 0) { e = eg->etab; for(i=0; inenv; i++, e++) envpgclose(e); . 227c Env *e; . 225c closeegrp(Egrp *eg) . 59c e->etab = ialloc(conf.npgenv*sizeof(Env), 0); . ## diffname port/pgrp.c 1991/1105 ## diff -e /n/bootesdump/1991/1018/sys/src/9/port/pgrp.c /n/bootesdump/1991/1105/sys/src/9/port/pgrp.c 313,314d ## diffname port/pgrp.c 1991/1110 ## diff -e /n/bootesdump/1991/1105/sys/src/9/port/pgrp.c /n/bootesdump/1991/1110/sys/src/9/port/pgrp.c 194a u->p->psstate = p; . 189a } . 188c char *p; p = u->p->psstate; if(reason) { u->p->psstate = reason; . ## diffname port/pgrp.c 1991/1112 ## diff -e /n/bootesdump/1991/1110/sys/src/9/port/pgrp.c /n/bootesdump/1991/1112/sys/src/9/port/pgrp.c 90,91c for(i=0; ipgrp == pg && p->kp == 0) { . ## diffname port/pgrp.c 1991/1113 ## diff -e /n/bootesdump/1991/1112/sys/src/9/port/pgrp.c /n/bootesdump/1991/1113/sys/src/9/port/pgrp.c 329a l = &mh->hash; . 327,328d 322a l = tom++; . 321a tom = to->mnthash; . 316c Mhead **h, **e, *f, **tom, **l, *mh; . ## diffname port/pgrp.c 1991/1127 ## diff -e /n/bootesdump/1991/1113/sys/src/9/port/pgrp.c /n/bootesdump/1991/1127/sys/src/9/port/pgrp.c 320a *to->crypt = *from->crypt; . 116a memset(p->crypt, 0, sizeof *p->crypt); . 51a p->crypt = cr++; . 44a /* * need to /dev/proc read protect crypt memory */ cr = ialloc(conf.npgrp*sizeof(Crypt), 0); . 43a Crypt *cr; . ## diffname port/pgrp.c 1991/1216 ## diff -e /n/bootesdump/1991/1127/sys/src/9/port/pgrp.c /n/bootesdump/1991/1216/sys/src/9/port/pgrp.c 107c qunlock(&p->debug); . 100c qunlock(&p->debug); . 98c qlock(&p->debug); . ## diffname port/pgrp.c 1991/1231 ## diff -e /n/bootesdump/1991/1216/sys/src/9/port/pgrp.c /n/bootesdump/1991/1231/sys/src/9/port/pgrp.c 91,92d ## diffname port/pgrp.c 1992/0111 ## diff -e /n/bootesdump/1991/1231/sys/src/9/port/pgrp.c /n/bootesdump/1992/0111/sys/src/9/port/pgrp.c 6c #include "../port/error.h" . ## diffname port/pgrp.c 1992/0128 ## diff -e /n/bootesdump/1992/0111/sys/src/9/port/pgrp.c /n/bootesdump/1992/0128/sys/src/9/port/pgrp.c 46,49c i = conf.npgrp*sizeof(Crypt); cr = ialloc(i, 0); pgrpalloc.cryptbase = (ulong)cr; pgrpalloc.crypttop = (ulong)cr + i; . 8,14c Pgrps pgrpalloc; . ## diffname port/pgrp.c 1992/0321 ## diff -e /n/bootesdump/1992/0128/sys/src/9/port/pgrp.c /n/bootesdump/1992/0321/sys/src/9/port/pgrp.c 2c #include "../port/lib.h" . ## diffname port/pgrp.c 1992/0428 ## diff -e /n/bootesdump/1992/0321/sys/src/9/port/pgrp.c /n/bootesdump/1992/0428/sys/src/9/port/pgrp.c 91c if(p->pid==0 || p->noteid != noteid){ . 88,89c ep = p+conf.nproc; for(; p < ep; p++) { if(p->state == Dead) continue; if(p->noteid == noteid && p->kp == 0) { . 84a . 79,80c Proc *p, *ep; . 77c pgrpnote(ulong noteid, char *a, long n, int flag) . ## diffname port/pgrp.c 1992/0520 ## diff -e /n/bootesdump/1992/0428/sys/src/9/port/pgrp.c /n/bootesdump/1992/0520/sys/src/9/port/pgrp.c 370a return 0; /* not reached */ . 296a return 0; /* not reached */ . 165a return 0; /* not reached */ . 145a return 0; /* not reached */ . 126a return 0; /* not reached */ . ## diffname port/pgrp.c 1992/0602 ## diff -e /n/bootesdump/1992/0520/sys/src/9/port/pgrp.c /n/bootesdump/1992/0602/sys/src/9/port/pgrp.c 202,204c tsleep(&u->p->sleep, return0, 0, 1000); . ## diffname port/pgrp.c 1992/0607 ## diff -e /n/bootesdump/1992/0602/sys/src/9/port/pgrp.c /n/bootesdump/1992/0607/sys/src/9/port/pgrp.c 185a unlock(f); . 179a lock(f); . ## diffname port/pgrp.c 1992/0619 ## diff -e /n/bootesdump/1992/0607/sys/src/9/port/pgrp.c /n/bootesdump/1992/0619/sys/src/9/port/pgrp.c 396,399c free(f); . 394a . 380,388d 350,378d 334c mh = smalloc(sizeof(Mhead)); . 277,301c m = smalloc(sizeof(Mount)); m->to = to; m->head = mh; incref(to); m->mountid = incref(&mountid); return m; . 264,267c free(f); . 246,249c free(eg); . 232c free(p); . 227,230d 224c free(f); . 155,168c f = smalloc(sizeof(Fgrp)); f->ref = 1; return f; . 135,147c e = smalloc(sizeof(Egrp)+sizeof(Env)*conf.npgenv); /* This is a sleazy hack to make malloc work .. devenv need rewriting. */ e->etab = (Env*)((uchar*)e+sizeof(Egrp)); e->ref = 1; return e; . 112,127c p = smalloc(sizeof(Pgrp)+sizeof(Crypt)); p->ref = 1; /* This needs to have its own arena for protection */ p->crypt = (Crypt*)((uchar*)p+sizeof(Pgrp)); p->pgrpid = incref(&pgrpid); return p; . 30,76d 10,28d 8c static Ref pgrpid; static Ref mountid; . ## diffname port/pgrp.c 1992/0623 ## diff -e /n/bootesdump/1992/0619/sys/src/9/port/pgrp.c /n/bootesdump/1992/0623/sys/src/9/port/pgrp.c 189,196c l = &to->entries; qlock(from); for(e = from->entries; e; e = e->link) { ne = smalloc(sizeof(Evalue)); ne->name = smalloc(strlen(e->name)+1); strcpy(ne->name, e->name); if(e->value) { ne->value = smalloc(e->len); memmove(ne->value, e->value, e->len); ne->len = e->len; } ne->path = ++to->path; *l = ne; l = &ne->link; } qunlock(from); . 186,187c Evalue **l, *ne, *e; . 146,149c for(e = eg->entries; e; e = next) { next = e->link; free(e->name); if(e->value) free(e->value); free(e); } . 142,143c Evalue *e, *next; . 85c new = smalloc(sizeof(Fgrp)); new->ref = 1; . 69,78d 55,67d ## diffname port/pgrp.c 1992/0625 ## diff -e /n/bootesdump/1992/0623/sys/src/9/port/pgrp.c /n/bootesdump/1992/0625/sys/src/9/port/pgrp.c 161,183d 118,134d ## diffname port/pgrp.c 1992/0705 ## diff -e /n/bootesdump/1992/0625/sys/src/9/port/pgrp.c /n/bootesdump/1992/0705/sys/src/9/port/pgrp.c 181,186c while(m) { f = m->next; close(m->to); free(m); m = f; } . ## diffname port/pgrp.c 1992/0711 ## diff -e /n/bootesdump/1992/0705/sys/src/9/port/pgrp.c /n/bootesdump/1992/0711/sys/src/9/port/pgrp.c 136c Mount *m; . ## diffname port/pgrp.c 1992/0824 ## diff -e /n/bootesdump/1992/0711/sys/src/9/port/pgrp.c /n/bootesdump/1992/0824/sys/src/9/port/pgrp.c 186a } void resrcwait(char *reason) { char *p; p = u->p->psstate; if(reason) { u->p->psstate = reason; print("%s\n", reason); } if(u == 0) panic("resrcwait"); tsleep(&u->p->sleep, return0, 0, 1000); u->p->psstate = p; . 176a closefgrp(Fgrp *f) { int i; Chan *c; if(decref(f) == 0) { for(i = 0; i <= f->maxfd; i++) if(c = f->fd[i]) close(c); free(f); } } Mount* newmount(Mhead *mh, Chan *to) { Mount *m; m = smalloc(sizeof(Mount)); m->to = to; m->head = mh; incref(to); m->mountid = incref(&mountid); return m; } void . 175a Fgrp* dupfgrp(Fgrp *f) { Fgrp *new; Chan *c; int i; new = smalloc(sizeof(Fgrp)); new->ref = 1; lock(f); new->maxfd = f->maxfd; for(i = 0; i <= f->maxfd; i++) { if(c = f->fd[i]){ incref(c); new->fd[i] = c; } } unlock(f); return new; } . 118,146d 112a freecrypt(p->crypt); . 78,94d 55,76d 49,50c p->crypt = newcrypt(); . 47c p = smalloc(sizeof(Pgrp)); . 33c if(!waserror()) { . 29c if(p->pid == 0 || p->noteid != noteid){ . 11a freecrypt(Crypt *c) { lock(&cryptalloc); c->next = cryptalloc.free; cryptalloc.free = c; unlock(&cryptalloc); } void . 10a struct { Lock; Crypt *free; } cryptalloc; /* * crypt entries are allocated from a pool rather than allocated using malloc so * the memory can be protected from reading by devproc. The base and top of the * crypt arena is stored in palloc for devproc. */ Crypt* newcrypt(void) { Crypt *c; lock(&cryptalloc); if(cryptalloc.free) { c = cryptalloc.free; cryptalloc.free = c->next; unlock(&cryptalloc); return c; } cryptalloc.free = malloc(sizeof(Crypt)*conf.nproc); if(cryptalloc.free == 0) panic("newcrypt"); for(c = cryptalloc.free+1; c < cryptalloc.free+conf.nproc-1; c++) c->next = c+1; palloc.cmembase = (ulong)cryptalloc.free; palloc.cmembase = palloc.cmembase+(sizeof(Crypt)*conf.nproc); unlock(&cryptalloc); return newcrypt(); } . ## diffname port/pgrp.c 1992/1008 ## diff -e /n/bootesdump/1992/0824/sys/src/9/port/pgrp.c /n/bootesdump/1992/1008/sys/src/9/port/pgrp.c 43c palloc.cmemtop = palloc.cmembase+(sizeof(Crypt)*conf.nproc); . 39c for(c = cryptalloc.free; c < cryptalloc.free+conf.nproc-1; c++) . 35c cryptalloc.free = xalloc(sizeof(Crypt)*conf.nproc); . ## diffname port/pgrp.c 1992/1209 ## diff -e /n/bootesdump/1992/1008/sys/src/9/port/pgrp.c /n/bootesdump/1992/1209/sys/src/9/port/pgrp.c 232c tsleep(&u->p->sleep, return0, 0, 300); . ## diffname port/pgrp.c 1993/0330 ## diff -e /n/bootesdump/1992/1209/sys/src/9/port/pgrp.c /n/bootesdump/1993/0330/sys/src/9/port/pgrp.c 132d 119d 95d 49,57d 11,47d ## diffname port/pgrp.c 1993/0501 ## diff -e /n/bootesdump/1993/0330/sys/src/9/port/pgrp.c /n/fornaxdump/1993/0501/sys/src/brazil/port/pgrp.c 183,184c tsleep(&up->sleep, return0, 0, 300); up->psstate = p; . 180,181d 177c up->psstate = reason; . 175c if(up == 0) panic("resrcwait"); p = up->psstate; . 164a m->mountid = 0; . 153a m->flag = flag; if(spec != 0) strcpy(m->spec, spec); . 145c newmount(Mhead *mh, Chan *to, int flag, char *spec) . 96c n = newmount(mh, m->to, m->flag, m->spec); . ## diffname port/pgrp.c 1993/1115 ## diff -e /n/fornaxdump/1993/0501/sys/src/brazil/port/pgrp.c /n/fornaxdump/1993/1115/sys/src/brazil/port/pgrp.c 143d ## diffname port/pgrp.c 1994/0613 ## diff -e /n/fornaxdump/1993/1115/sys/src/brazil/port/pgrp.c /n/fornaxdump/1994/0613/sys/src/brazil/port/pgrp.c 101a /* * Allocate mount ids in the same sequence as the parent group */ lock(&mountid); for(m = order; m; m = m->order) m->copy->mountid = mountid.ref++; unlock(&mountid); . 96c n = smalloc(sizeof(Mount)); n->to = m->to; incref(n->to); n->head = mh; n->flag = m->flag; if(m->spec != 0) strcpy(n->spec, m->spec); m->copy = n; pgrpinsert(&order, m); . 88c for(f = from->mnthash[i]; f; f = f->hash) { . 86c for(i = 0; i < MNTHASH; i++) { . 83,84c order = 0; . 79,80c int i; Mount *n, *m, **link, *order; Mhead *f, **tom, **l, *mh; . 76a pgrpinsert(Mount **order, Mount *m) { Mount *f; m->order = 0; if(*order == 0) { *order = m; return; } for(f = *order; f; f = f->order) { if(m->mountid < f->mountid) { m->order = f; *order = m; return; } order = &f->order; } *order = m; } /* * pgrpcpy MUST preserve the mountid allocation order of the parent group */ void . ## diffname port/pgrp.c 1994/0812 ## diff -e /n/fornaxdump/1994/0613/sys/src/brazil/port/pgrp.c /n/fornaxdump/1994/0812/sys/src/brazil/port/pgrp.c 52a Rgrp* newrgrp(void) { Rgrp *r; r = smalloc(sizeof(Rgrp)); r->ref = 1; return r; } void closergrp(Rgrp *r) { if(decref(r) == 0) free(r); } . ## diffname port/pgrp.c 1995/0218 ## diff -e /n/fornaxdump/1994/0812/sys/src/brazil/port/pgrp.c /n/fornaxdump/1995/0218/sys/src/brazil/port/pgrp.c 27c if(up != p && p->noteid == noteid && p->kp == 0) { . ## diffname port/pgrp.c 1996/1218 ## diff -e /n/fornaxdump/1995/0218/sys/src/brazil/port/pgrp.c /n/fornaxdump/1996/1218/sys/src/brazil/port/pgrp.c 111c *l = m->order; . 109c l = &f->order; . 106c *l = f; . 102a l = order; . 99c if(*order == nil) { . 96c Mount *f, **l; . ## diffname port/pgrp.c 1997/0117 ## diff -e /n/fornaxdump/1996/1218/sys/src/brazil/port/pgrp.c /n/fornaxdump/1997/0117/sys/src/brazil/port/pgrp.c 113c *order = m; . 111c order = &f->order; . 108c *order = m; . 103,104d 99c if(*order == 0) { . 96c Mount *f; . ## diffname port/pgrp.c 1997/0327 ## diff -e /n/fornaxdump/1997/0117/sys/src/brazil/port/pgrp.c /n/emeliedump/1997/0327/sys/src/brazil/port/pgrp.c 223c cclose(m->to); . 193c cclose(c); . 82c cclose(f->from); . ## diffname port/pgrp.c 1997/0414 ## diff -e /n/emeliedump/1997/0327/sys/src/brazil/port/pgrp.c /n/emeliedump/1997/0414/sys/src/brazil/port/pgrp.c 195,196c if(decref(f) != 0) return; for(i = 0; i <= f->maxfd; i++) if(c = f->fd[i]) cclose(c); free(f); . 190,193c if(f == 0) return; . 90a qunlock(&p->debug); free(p); . 88,89d 79,86c qlock(&p->debug); p->pgrpid = -1; e = &p->mnthash[MNTHASH]; for(h = p->mnthash; h < e; h++) { for(f = *h; f; f = next) { cclose(f->from); mountfree(f->mount); next = f->hash; free(f); . 75,77c if(decref(p) != 0) return; . ## diffname port/pgrp.c 1997/0603 ## diff -e /n/emeliedump/1997/0414/sys/src/brazil/port/pgrp.c /n/emeliedump/1997/0603/sys/src/brazil/port/pgrp.c 200a free(f->fd); . 169a /* Make new fd list shorter if possible, preserving quantization */ new->nfd = f->maxfd+1; i = new->nfd%DELTAFD; if(i != 0) new->nfd += DELTAFD - i; new->fd = smalloc(new->nfd*sizeof(Chan*)); . ## diffname port/pgrp.c 1997/0606 ## diff -e /n/emeliedump/1997/0603/sys/src/brazil/port/pgrp.c /n/emeliedump/1997/0606/sys/src/brazil/port/pgrp.c 178d 175c new->fd = malloc(new->nfd*sizeof(Chan*)); if(new->fd == 0){ unlock(f); error("no memory for fgrp"); } . 169a if(f == nil){ new->fd = smalloc(DELTAFD*sizeof(Chan*)); new->nfd = DELTAFD; new->ref = 1; return new; } lock(f); . ## diffname port/pgrp.c 1997/1203 ## diff -e /n/emeliedump/1997/0606/sys/src/brazil/port/pgrp.c /n/emeliedump/1997/1203/sys/src/brazil/port/pgrp.c 234c strncpy(m->spec, spec, NAMELEN); . 159c wunlock(&from->ns); . 143,144c if(m->spec[0] != 0) strncpy(n->spec, m->spec, NAMELEN); . 125c wlock(&from->ns); . ## diffname port/pgrp.c 1998/0512 ## diff -e /n/emeliedump/1997/1203/sys/src/brazil/port/pgrp.c /n/emeliedump/1998/0512/sys/src/brazil/port/pgrp.c 148c link = &n->next; . 74c . ## diffname port/pgrp.c 1998/0811 ## diff -e /n/emeliedump/1998/0512/sys/src/brazil/port/pgrp.c /n/emeliedump/1998/0811/sys/src/brazil/port/pgrp.c 89a wunlock(&p->ns); . 78a wlock(&p->ns); . ## diffname port/pgrp.c 1998/0829 ## diff -e /n/emeliedump/1998/0811/sys/src/brazil/port/pgrp.c /n/emeliedump/1998/0829/sys/src/brazil/port/pgrp.c 151a runlock(&f->lock); . 134a mh->ref = 1; . 132a rlock(&f->lock); . 88c wunlock(&f->lock); putmhead(f); . 86a f->mount = nil; . 84a wlock(&f->lock); . ## diffname port/pgrp.c 2001/0527 ## diff -e /n/emeliedump/1998/0829/sys/src/brazil/port/pgrp.c /n/emeliedump/2001/0527/sys/src/9/port/pgrp.c 255a free(m->spec); . 242c kstrdup(&m->spec, spec); . 240c m->mflag = flag; . 145,151c n = newmount(mh, m->to, m->mflag, m->spec); . 137a incref(&mheadcounter); . 135a extern Ref mheadcounter; . 17c if(n >= ERRMAX-1) . 15c char buf[ERRMAX]; . ## diffname port/pgrp.c 2002/0411 ## diff -e /n/emeliedump/2001/0527/sys/src/9/port/pgrp.c /n/emeliedump/2002/0411/sys/src/9/port/pgrp.c 139d 136d ## diffname port/pgrp.c 2002/0731 ## diff -e /n/emeliedump/2002/0411/sys/src/9/port/pgrp.c /n/emeliedump/2002/0731/sys/src/9/port/pgrp.c 137,140c mh = newmhead(f->from); . ## diffname port/pgrp.c 2003/0511 ## diff -e /n/emeliedump/2002/0731/sys/src/9/port/pgrp.c /n/emeliedump/2003/0511/sys/src/9/port/pgrp.c 184a free(new); . 183c if(new->fd == nil){ .