venti: make sure arena checksum jobs cannot be missed
This commit is contained in:
parent
d4bf606d29
commit
01c1b7633c
1 changed files with 8 additions and 5 deletions
|
|
@ -31,7 +31,9 @@ initarenasum(void)
|
||||||
{
|
{
|
||||||
needzeroscore(); /* OS X */
|
needzeroscore(); /* OS X */
|
||||||
|
|
||||||
|
qlock(&sumlock);
|
||||||
sumwait.l = &sumlock;
|
sumwait.l = &sumlock;
|
||||||
|
qunlock(&sumlock);
|
||||||
|
|
||||||
if(vtproc(sumproc, nil) < 0){
|
if(vtproc(sumproc, nil) < 0){
|
||||||
seterr(EOk, "can't start arena checksum slave: %r");
|
seterr(EOk, "can't start arena checksum slave: %r");
|
||||||
|
|
@ -478,9 +480,6 @@ backsumarena(Arena *arena)
|
||||||
{
|
{
|
||||||
ASum *as;
|
ASum *as;
|
||||||
|
|
||||||
if(sumwait.l == nil)
|
|
||||||
return;
|
|
||||||
|
|
||||||
as = MK(ASum);
|
as = MK(ASum);
|
||||||
if(as == nil)
|
if(as == nil)
|
||||||
return;
|
return;
|
||||||
|
|
@ -492,6 +491,11 @@ backsumarena(Arena *arena)
|
||||||
else
|
else
|
||||||
sumq = as;
|
sumq = as;
|
||||||
sumqtail = as;
|
sumqtail = as;
|
||||||
|
/*
|
||||||
|
* Might get here while initializing arenas,
|
||||||
|
* before initarenasum has been called.
|
||||||
|
*/
|
||||||
|
if(sumwait.l)
|
||||||
rwakeup(&sumwait);
|
rwakeup(&sumwait);
|
||||||
qunlock(&sumlock);
|
qunlock(&sumlock);
|
||||||
}
|
}
|
||||||
|
|
@ -513,7 +517,6 @@ sumproc(void *unused)
|
||||||
qunlock(&sumlock);
|
qunlock(&sumlock);
|
||||||
arena = as->arena;
|
arena = as->arena;
|
||||||
free(as);
|
free(as);
|
||||||
|
|
||||||
sumarena(arena);
|
sumarena(arena);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue