diff --git a/src/backup/archive_index.rs b/src/backup/archive_index.rs index 02c162f5..2c7f5350 100644 --- a/src/backup/archive_index.rs +++ b/src/backup/archive_index.rs @@ -21,8 +21,8 @@ pub struct ArchiveIndexHeader { } -pub struct ArchiveIndexReader<'a> { - store: &'a ChunkStore, +pub struct ArchiveIndexReader { + store: Arc, file: File, size: usize, filename: PathBuf, @@ -32,7 +32,7 @@ pub struct ArchiveIndexReader<'a> { ctime: u64, } -impl <'a> Drop for ArchiveIndexReader<'a> { +impl Drop for ArchiveIndexReader { fn drop(&mut self) { if let Err(err) = self.unmap() { @@ -41,9 +41,9 @@ impl <'a> Drop for ArchiveIndexReader<'a> { } } -impl <'a> ArchiveIndexReader<'a> { +impl ArchiveIndexReader { - pub fn open(store: &'a ChunkStore, path: &Path) -> Result { + pub fn open(store: Arc, path: &Path) -> Result { let full_path = store.relative_path(path); @@ -189,7 +189,7 @@ impl <'a> ArchiveIndexReader<'a> { } pub struct BufferedArchiveReader<'a> { - index: &'a ArchiveIndexReader<'a>, + index: &'a ArchiveIndexReader, archive_size: u64, read_buffer: Vec, buffered_chunk_idx: usize, diff --git a/src/backup/datastore.rs b/src/backup/datastore.rs index 6548abb5..1bfd57b4 100644 --- a/src/backup/datastore.rs +++ b/src/backup/datastore.rs @@ -65,14 +65,14 @@ impl DataStore { pub fn create_image_writer>(&self, filename: P, size: usize, chunk_size: usize) -> Result { - let index = ImageIndexWriter::create(&self.chunk_store, filename.as_ref(), size, chunk_size)?; + let index = ImageIndexWriter::create(self.chunk_store.clone(), filename.as_ref(), size, chunk_size)?; Ok(index) } pub fn open_image_reader>(&self, filename: P) -> Result { - let index = ImageIndexReader::open(&self.chunk_store, filename.as_ref())?; + let index = ImageIndexReader::open(self.chunk_store.clone(), filename.as_ref())?; Ok(index) } @@ -90,7 +90,7 @@ impl DataStore { pub fn open_archive_reader>(&self, filename: P) -> Result { - let index = ArchiveIndexReader::open(&self.chunk_store, filename.as_ref())?; + let index = ArchiveIndexReader::open(self.chunk_store.clone(), filename.as_ref())?; Ok(index) } diff --git a/src/backup/image_index.rs b/src/backup/image_index.rs index e362b2de..1d1c290d 100644 --- a/src/backup/image_index.rs +++ b/src/backup/image_index.rs @@ -2,6 +2,7 @@ use failure::*; use super::chunk_store::*; +use std::sync::Arc; use std::io::{Read, Write}; use std::path::{Path, PathBuf}; use std::os::unix::io::AsRawFd; @@ -21,8 +22,8 @@ pub struct ImageIndexHeader { // split image into fixed size chunks -pub struct ImageIndexReader<'a> { - store: &'a ChunkStore, +pub struct ImageIndexReader { + store: Arc, filename: PathBuf, chunk_size: usize, size: usize, @@ -31,7 +32,7 @@ pub struct ImageIndexReader<'a> { ctime: u64, } -impl <'a> Drop for ImageIndexReader<'a> { +impl Drop for ImageIndexReader { fn drop(&mut self) { if let Err(err) = self.unmap() { @@ -40,9 +41,9 @@ impl <'a> Drop for ImageIndexReader<'a> { } } -impl <'a> ImageIndexReader<'a> { +impl ImageIndexReader { - pub fn open(store: &'a ChunkStore, path: &Path) -> Result { + pub fn open(store: Arc, path: &Path) -> Result { let full_path = store.relative_path(path); @@ -150,8 +151,8 @@ impl <'a> ImageIndexReader<'a> { } } -pub struct ImageIndexWriter<'a> { - store: &'a ChunkStore, +pub struct ImageIndexWriter { + store: Arc, filename: PathBuf, tmp_filename: PathBuf, chunk_size: usize, @@ -162,7 +163,7 @@ pub struct ImageIndexWriter<'a> { ctime: u64, } -impl <'a> Drop for ImageIndexWriter<'a> { +impl Drop for ImageIndexWriter { fn drop(&mut self) { let _ = std::fs::remove_file(&self.tmp_filename); // ignore errors @@ -172,9 +173,9 @@ impl <'a> Drop for ImageIndexWriter<'a> { } } -impl <'a> ImageIndexWriter<'a> { +impl ImageIndexWriter { - pub fn create(store: &'a ChunkStore, path: &Path, size: usize, chunk_size: usize) -> Result { + pub fn create(store: Arc, path: &Path, size: usize, chunk_size: usize) -> Result { let full_path = store.relative_path(path); let mut tmp_path = full_path.clone();