diff options
Diffstat (limited to 'os/port/pgrp.c')
| -rw-r--r-- | os/port/pgrp.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/os/port/pgrp.c b/os/port/pgrp.c index 6b2d7d5c..309e2153 100644 --- a/os/port/pgrp.c +++ b/os/port/pgrp.c @@ -16,7 +16,6 @@ newpgrp(void) p = smalloc(sizeof(Pgrp)); p->ref = 1; p->pgrpid = incref(&pgrpid); - p->pin = Nopin; p->progmode = 0644; p->privatemem = 0; return p; @@ -83,18 +82,23 @@ pgrpcpy(Pgrp *to, Pgrp *from) Mhead *f, **tom, **l, *mh; wlock(&from->ns); + if(waserror()){ + wunlock(&from->ns); + nexterror(); + } order = 0; tom = to->mnthash; for(i = 0; i < MNTHASH; i++) { l = tom++; for(f = from->mnthash[i]; f; f = f->hash) { rlock(&f->lock); - mh = malloc(sizeof(Mhead)); - if(mh == nil) { + if(waserror()){ runlock(&f->lock); - wunlock(&from->ns); - error(Enomem); + nexterror(); } + mh = malloc(sizeof(Mhead)); + if(mh == nil) + error(Enomem); mh->from = f->from; mh->ref = 1; incref(mh->from); @@ -103,16 +107,12 @@ pgrpcpy(Pgrp *to, Pgrp *from) link = &mh->mount; for(m = f->mount; m; m = m->next) { n = newmount(mh, m->to, m->mflag, m->spec); - if(n == nil) { - runlock(&f->lock); - wunlock(&from->ns); - error(Enomem); - } m->copy = n; pgrpinsert(&order, m); *link = n; link = &n->next; } + poperror(); runlock(&f->lock); } } @@ -124,12 +124,12 @@ pgrpcpy(Pgrp *to, Pgrp *from) m->copy->mountid = mountid.ref++; unlock(&mountid.l); - to->pin = from->pin; - + to->progmode = from->progmode; to->slash = cclone(from->slash); to->dot = cclone(from->dot); to->nodevs = from->nodevs; + poperror(); wunlock(&from->ns); } |
