[pbs-devel] [PATCH backup 08/13] snapshot_reader: use Rc for structs that are not Send+Sync
Fabian Grünbichler
f.gruenbichler at proxmox.com
Tue Feb 13 10:20:58 CET 2024
On February 12, 2024 2:17 pm, Maximiliano Sandoval wrote:
> Fixes the clippy lint:
>
> ```
> warning: usage of an `Arc` that is not `Send` and `Sync`
> --> pbs-datastore/src/snapshot_reader.rs:156:52
> |
> 156 | self.current_index = Some((Arc::new(index), 0, order));
> | ^^^^^^^^^^^^^^^
> |
> = note: `Arc<Box<dyn IndexFile + Send>>` is not `Send` and `Sync` as:
> = note: - the trait `Sync` is not implemented for `Box<dyn IndexFile + Send>`
> = help: consider using an `Rc` instead. `Arc` does not provide benefits for non `Send` and `Sync` types
> = note: if you intend to use `Arc` with `Send` and `Sync` traits
> = note: wrap the inner type with a `Mutex` or implement `Send` and `Sync` for `Box<dyn IndexFile + Send>`
> = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#arc_with_non_send_sync
> = note: `#[warn(clippy::arc_with_non_send_sync)]` on by default
> ```
while this fixes the lint, isn't Rc also unneeded here? or am I missing
something..
>
> Signed-off-by: Maximiliano Sandoval <m.sandoval at proxmox.com>
> ---
> pbs-datastore/src/snapshot_reader.rs | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/pbs-datastore/src/snapshot_reader.rs b/pbs-datastore/src/snapshot_reader.rs
> index ec7a48e5..816df310 100644
> --- a/pbs-datastore/src/snapshot_reader.rs
> +++ b/pbs-datastore/src/snapshot_reader.rs
> @@ -1,6 +1,7 @@
> use std::fs::File;
> use std::os::unix::io::{AsRawFd, FromRawFd};
> use std::path::Path;
> +use std::rc::Rc;
> use std::sync::Arc;
>
> use anyhow::{bail, Error};
> @@ -126,7 +127,7 @@ pub struct SnapshotChunkIterator<'a, F: Fn(&[u8; 32]) -> bool> {
> todo_list: Vec<String>,
> skip_fn: F,
> #[allow(clippy::type_complexity)]
> - current_index: Option<(Arc<Box<dyn IndexFile + Send>>, usize, Vec<(usize, u64)>)>,
> + current_index: Option<(Rc<Box<dyn IndexFile + Send>>, usize, Vec<(usize, u64)>)>,
> }
>
> impl<'a, F: Fn(&[u8; 32]) -> bool> Iterator for SnapshotChunkIterator<'a, F> {
> @@ -153,7 +154,7 @@ impl<'a, F: Fn(&[u8; 32]) -> bool> Iterator for SnapshotChunkIterator<'a, F> {
> let order =
> datastore.get_chunks_in_order(&*index, &self.skip_fn, |_| Ok(()))?;
>
> - self.current_index = Some((Arc::new(index), 0, order));
> + self.current_index = Some((Rc::new(index), 0, order));
> } else {
> return Ok(None);
> }
> --
> 2.39.2
More information about the pbs-devel
mailing list