summaryrefslogtreecommitdiff
path: root/os/port/pgrp.c
diff options
context:
space:
mode:
Diffstat (limited to 'os/port/pgrp.c')
-rw-r--r--os/port/pgrp.c24
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);
}