plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

commit 01c1b7633c0576ad30880ce8dd96aa20e9bfdbc2
parent d4bf606d29304006a85a35a8f09d38bf1529d2af
Author: Russ Cox <rsc@swtch.com>
Date:   Thu,  3 Jul 2008 22:39:59 -0400

venti: make sure arena checksum jobs cannot be missed

Diffstat:
Msrc/cmd/venti/srv/arena.c | 13++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)

diff --git 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); } }