venti: avoid race in mirrorarenas (Michael Kaminsky)
This commit is contained in:
parent
92baf59b69
commit
6610dac99c
1 changed files with 3 additions and 6 deletions
|
|
@ -93,6 +93,7 @@ ewritepart(Part *p, u64int offset, u8int *buf, u32int count)
|
||||||
* src with writing dst during copy. This is an easy factor of two
|
* src with writing dst during copy. This is an easy factor of two
|
||||||
* (almost) in performance.
|
* (almost) in performance.
|
||||||
*/
|
*/
|
||||||
|
static Write wsync;
|
||||||
static void
|
static void
|
||||||
writeproc(void *v)
|
writeproc(void *v)
|
||||||
{
|
{
|
||||||
|
|
@ -100,7 +101,7 @@ writeproc(void *v)
|
||||||
|
|
||||||
USED(v);
|
USED(v);
|
||||||
while((w = recvp(writechan)) != nil){
|
while((w = recvp(writechan)) != nil){
|
||||||
if(w->n == 0)
|
if(w == &wsync)
|
||||||
continue;
|
continue;
|
||||||
if(ewritepart(dst, w->o, w->p, w->n) < 0)
|
if(ewritepart(dst, w->o, w->p, w->n) < 0)
|
||||||
w->error = 1;
|
w->error = 1;
|
||||||
|
|
@ -147,11 +148,7 @@ copy(uvlong start, uvlong end, char *what, DigestState *ds)
|
||||||
/*
|
/*
|
||||||
* wait for queued write to finish
|
* wait for queued write to finish
|
||||||
*/
|
*/
|
||||||
w[i].p = nil;
|
sendp(writechan, &wsync);
|
||||||
w[i].o = 0;
|
|
||||||
w[i].n = 0;
|
|
||||||
w[i].error = 0;
|
|
||||||
sendp(writechan, &w[i]);
|
|
||||||
i = 1-i;
|
i = 1-i;
|
||||||
if(w[i].error)
|
if(w[i].error)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue