Fix double-locking bug in flush()

This commit is contained in:
Olivier 'reivilibre' 2021-11-14 10:10:55 +00:00
parent 34ec8966b2
commit e0e68ce76d
1 changed files with 12 additions and 6 deletions

View File

@ -527,14 +527,20 @@ impl RawPile for SqliteBloblogPile {
Ok(Box::new(ki))
}
fn flush(&self) -> anyhow::Result<()> {
let inner = self.inner.lock().unwrap();
let _inner = self
.writers_reach_zero
.wait_while(inner, |inner| inner.writers_in_progress != 0)
.unwrap();
// must do this before we lock inner.
self.flush_queued_pointer_writes()?;
let inner = self.inner.lock().unwrap();
if inner.writers_in_progress > 0 {
let _inner = self
.writers_reach_zero
.wait_while(inner, |inner| {
inner.writers_in_progress != 0
})
.unwrap();
}
// TODO sync all files we have open first!
sync();
Ok(())