Need to wait on flock, not client_lock.
Signed-off-by: Sage Weil <sage@inktank.com>
r = objectcacher->file_read(&in->oset, &in->layout, in->snapid,
off, len, bl, 0, onfinish);
if (r == 0) {
+ client_lock.Unlock();
+ flock.Lock();
while (!done)
- cond.Wait(client_lock);
+ cond.Wait(flock);
+ flock.Unlock();
+ client_lock.Lock();
r = rvalue;
} else {
// it was cached.
pos, left, &tbl, 0,
in->truncate_size, in->truncate_seq,
onfinish);
+ client_lock.Unlock();
+ flock.Lock();
while (!done)
- cond.Wait(client_lock);
+ cond.Wait(flock);
+ flock.Unlock();
+ client_lock.Lock();
if (r < 0)
return r;
in->truncate_size, in->truncate_seq,
onfinish, onsafe);
+ client_lock.Unlock();
+ flock.Lock();
while (!done)
- cond.Wait(client_lock);
+ cond.Wait(flock);
+ flock.Unlock();
+ client_lock.Lock();
}
// time