Fix a bug in experimental mmap storage

This commit is contained in:
Igor Katson 2024-05-06 23:02:10 +03:00
parent 3b0987ec23
commit 108ad74464
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
2 changed files with 23 additions and 3 deletions

View file

@ -25,9 +25,11 @@ impl StorageFactory for MmapFilesystemStorageFactory {
fn init_storage(&self, meta: &ManagedTorrentInfo) -> anyhow::Result<Self::Storage> {
let fs_storage = FilesystemStorageFactory::default().init_storage(meta)?;
let mut mmaps = Vec::new();
for file in fs_storage.opened_files.iter() {
let mmap = unsafe { MmapOptions::new().map_mut(&*file.file.read()) }
.context("error mapping file")?;
for (idx, file) in fs_storage.opened_files.iter().enumerate() {
let fg = file.file.write();
fg.set_len(meta.file_infos[idx].len)
.context("mmap storage: error setting length")?;
let mmap = unsafe { MmapOptions::new().map_mut(&*fg) }.context("error mapping file")?;
mmaps.push(RwLock::new(mmap));
}