From 01c1b7633c0576ad30880ce8dd96aa20e9bfdbc2 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 3 Jul 2008 22:39:59 -0400 Subject: venti: make sure arena checksum jobs cannot be missed --- src/cmd/venti/srv/arena.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/cmd/venti') diff --git a/src/cmd/venti/srv/arena.c b/src/cmd/venti/srv/arena.c index d77e0ccf..08952aa1 100644 --- a/src/cmd/venti/srv/arena.c +++ b/src/cmd/venti/srv/arena.c @@ -31,7 +31,9 @@ initarenasum(void) { needzeroscore(); /* OS X */ + qlock(&sumlock); sumwait.l = &sumlock; + qunlock(&sumlock); if(vtproc(sumproc, nil) < 0){ seterr(EOk, "can't start arena checksum slave: %r"); @@ -478,9 +480,6 @@ backsumarena(Arena *arena) { ASum *as; - if(sumwait.l == nil) - return; - as = MK(ASum); if(as == nil) return; @@ -492,7 +491,12 @@ backsumarena(Arena *arena) else sumq = as; sumqtail = as; - rwakeup(&sumwait); + /* + * Might get here while initializing arenas, + * before initarenasum has been called. + */ + if(sumwait.l) + rwakeup(&sumwait); qunlock(&sumlock); } @@ -513,7 +517,6 @@ sumproc(void *unused) qunlock(&sumlock); arena = as->arena; free(as); - sumarena(arena); } } -- cgit v1.2.3