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

View File

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