From 3d3cdbeb0c5aa0b0f6b04a74dde7d805022a874e Mon Sep 17 00:00:00 2001 From: Pere Diaz Bou Date: Wed, 5 Mar 2025 11:24:37 +0100 Subject: [PATCH] fix generic and windows sync compilation --- core/io/generic.rs | 11 +++++++---- core/io/windows.rs | 2 +- core/storage/database.rs | 2 ++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/core/io/generic.rs b/core/io/generic.rs index 716ef5bc4..32c8c3828 100644 --- a/core/io/generic.rs +++ b/core/io/generic.rs @@ -1,7 +1,7 @@ use crate::{Completion, File, LimboError, OpenFlags, Result, IO}; use std::cell::RefCell; use std::io::{Read, Seek, Write}; -use std::rc::Rc; +use std::sync::Arc; use tracing::{debug, trace}; pub struct GenericIO {} @@ -13,15 +13,18 @@ impl GenericIO { } } +unsafe impl Send for GenericIO {} +unsafe impl Sync for GenericIO {} + impl IO for GenericIO { - fn open_file(&self, path: &str, flags: OpenFlags, _direct: bool) -> Result> { + fn open_file(&self, path: &str, flags: OpenFlags, _direct: bool) -> Result> { trace!("open_file(path = {})", path); let file = std::fs::OpenOptions::new() .read(true) .write(true) .create(matches!(flags, OpenFlags::Create)) .open(path)?; - Ok(Rc::new(GenericFile { + Ok(Arc::new(GenericFile { file: RefCell::new(file), })) } @@ -72,7 +75,7 @@ impl File for GenericFile { Ok(()) } - fn pwrite(&self, pos: usize, buffer: Rc>, c: Completion) -> Result<()> { + fn pwrite(&self, pos: usize, buffer: Arc>, c: Completion) -> Result<()> { let mut file = self.file.borrow_mut(); file.seek(std::io::SeekFrom::Start(pos as u64))?; let buf = buffer.borrow(); diff --git a/core/io/windows.rs b/core/io/windows.rs index bd3ea2e9d..3c2c44129 100644 --- a/core/io/windows.rs +++ b/core/io/windows.rs @@ -70,7 +70,7 @@ impl File for WindowsFile { Ok(()) } - fn pwrite(&self, pos: usize, buffer: Rc>, c: Completion) -> Result<()> { + fn pwrite(&self, pos: usize, buffer: Arc>, c: Completion) -> Result<()> { let mut file = self.file.borrow_mut(); file.seek(std::io::SeekFrom::Start(pos as u64))?; let buf = buffer.borrow(); diff --git a/core/storage/database.rs b/core/storage/database.rs index 36d4d0052..1f995e23e 100644 --- a/core/storage/database.rs +++ b/core/storage/database.rs @@ -24,7 +24,9 @@ pub struct FileStorage { file: Arc, } +#[cfg(feature = "fs")] unsafe impl Send for FileStorage {} +#[cfg(feature = "fs")] unsafe impl Sync for FileStorage {} #[cfg(feature = "fs")]