mirror of
https://github.com/aljazceru/turso.git
synced 2026-01-01 07:24:19 +01:00
core: clear dirty on finish write
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com>
This commit is contained in:
@@ -24,7 +24,7 @@ const PAGE_UPTODATE: usize = 0b001;
|
||||
const PAGE_LOCKED: usize = 0b010;
|
||||
/// Page had an I/O error.
|
||||
const PAGE_ERROR: usize = 0b100;
|
||||
/// Page had an I/O error.
|
||||
/// Page is dirty. Flush needed.
|
||||
const PAGE_DIRTY: usize = 0b1000;
|
||||
|
||||
impl Default for Page {
|
||||
@@ -333,14 +333,17 @@ impl Pager {
|
||||
|
||||
pub fn cacheflush(&self) -> Result<()> {
|
||||
let mut dirty_pages = RefCell::borrow_mut(&self.dirty_pages);
|
||||
if dirty_pages.len() == 0 {
|
||||
return Ok(());
|
||||
}
|
||||
loop {
|
||||
if dirty_pages.len() == 0 {
|
||||
break;
|
||||
}
|
||||
let page = dirty_pages.pop().unwrap();
|
||||
sqlite3_ondisk::begin_write_btree_page(self, &page)?;
|
||||
self.io.run_once()?;
|
||||
}
|
||||
self.io.run_once()?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,6 +318,7 @@ fn finish_read_btree_page(
|
||||
|
||||
pub fn begin_write_btree_page(pager: &Pager, page: &Rc<RefCell<Page>>) -> Result<()> {
|
||||
let page_source = &pager.page_source;
|
||||
let page_finish = page.clone();
|
||||
let page = page.borrow();
|
||||
let contents = page.contents.read().unwrap();
|
||||
let contents = contents.as_ref().unwrap();
|
||||
@@ -327,6 +328,7 @@ pub fn begin_write_btree_page(pager: &Pager, page: &Rc<RefCell<Page>>) -> Result
|
||||
Box::new(move |bytes_written: i32| {
|
||||
let buf_copy = buf_copy.clone();
|
||||
let buf_len = buf_copy.borrow().len();
|
||||
page_finish.borrow_mut().clear_dirty();
|
||||
if bytes_written < buf_len as i32 {
|
||||
log::error!("wrote({bytes_written}) less than expected({buf_len})");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user