URI: 
       tventi: make sure arena checksum jobs cannot be missed - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 01c1b7633c0576ad30880ce8dd96aa20e9bfdbc2
   DIR parent d4bf606d29304006a85a35a8f09d38bf1529d2af
  HTML 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:
         M src/cmd/venti/srv/arena.c           |      13 ++++++++-----
       
       1 file changed, 8 insertions(+), 5 deletions(-)
       ---
   DIR diff --git a/src/cmd/venti/srv/arena.c b/src/cmd/venti/srv/arena.c
       t@@ -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");
       t@@ -478,9 +480,6 @@ backsumarena(Arena *arena)
        {
                ASum *as;
        
       -        if(sumwait.l == nil)
       -                return;
       -
                as = MK(ASum);
                if(as == nil)
                        return;
       t@@ -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);
        }
        
       t@@ -513,7 +517,6 @@ sumproc(void *unused)
                        qunlock(&sumlock);
                        arena = as->arena;
                        free(as);
       -
                        sumarena(arena);
                }
        }