Initialize the rwlock in struct pgrp
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 1 Oct 2015 01:20:17 +0000 (21:20 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 8 Oct 2015 14:29:57 +0000 (10:29 -0400)
This escaped our notice for a while, since the reader CV is only used
when there is a writer.  That requires some R/W contention on the lock.

The way this popped up was if you did two ifconfigs back to back.
ifconfig does some mounting and cs removes old #srv/cs files.  Some
combination of these led to a writer mucking with the NS while another
thread was calling findmount.  The concurrent threads was a critical
part, and things like printks could throw it all off.  Good times.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/ns/pgrp.c

index db28ad3..69922e9 100644 (file)
@@ -58,6 +58,7 @@ struct pgrp *newpgrp(void)
        p->pgrpid = NEXT_ID(pgrpid);
        p->progmode = 0644;
        qlock_init(&p->debug);
+       rwinit(&p->ns);
        qlock_init(&p->nsh);
        return p;
 }