All qlocks are initialized
[akaros.git] / kern / src / ns / pgrp.c
index a287436..1ed6ab3 100644 (file)
@@ -56,10 +56,12 @@ newpgrp(void)
 {
        struct pgrp *p;
 
-       p = kzmalloc(sizeof(struct pgrp), 0);
+       p = kzmalloc(sizeof(struct pgrp), KMALLOC_WAIT);
        kref_init(&p->ref, freepgrp, 1);
        p->pgrpid = NEXT_ID(pgrpid);
        p->progmode = 0644;
+       qlock_init(&p->debug);
+       qlock_init(&p->nsh);
        return p;
 }
 
@@ -178,21 +180,15 @@ freefgrp(struct kref *k)
 }
 
 struct fgrp*
-newfgrp(struct fgrp *old)
+newfgrp(void)
 {
        struct fgrp *new;
        int n;
 
        new = kzmalloc(sizeof(struct fgrp), 0);
        kref_init(&new->ref, freefgrp, 1);
+       spinlock_init(&new->lock);
        n = DELTAFD;
-       if(old != NULL){
-               spin_lock(&old->lock);
-               if(old->maxfd >= n)
-                       n = (old->maxfd+1 + DELTAFD-1)/DELTAFD * DELTAFD;
-               new->maxfd = old->maxfd;
-               spin_unlock(&old->lock);
-       }
        new->nfd = n;
        new->fd = kzmalloc(n * sizeof(struct chan *), 0);
        return new;
@@ -206,8 +202,7 @@ dupfgrp(struct fgrp *f)
        struct fgrp *new;
        int n;
 
-       new = kzmalloc(sizeof(struct fgrp), 0);
-       assert(new);
+       new = kzmalloc(sizeof(struct fgrp), KMALLOC_WAIT);
        kref_init(&new->ref, freefgrp, 1);
        spin_lock(&f->lock);
        if (f->closed) {