How do I get a &mut to the pointee in a ArcSwap type? I did the following but it always returns None:
What am I doing wrong and any pointers of how to get it right?
let value = ArcSwap::new(Arc::new(T));
let value = value.load();
let mut value : Arc<T> = Arc::clone(&value);
let value = Arc::get_mut(&mut value);
if let Some(value) = value
{
value.do_something();
}
else
{
// I always come here.
}
Arc::get_mut
can only work on Arc
s that are not currently aliased. To get an unaliased Arc
out of the ArcSwap
, you would need to replace it with something else. That might not fit your use case though; alternatively, you could try designing the type within the Arc
in a way that shared-reference access is sufficient, or you might need to use a Mutex
.
Since this question features no actual practical problems, it's of course impossible to give specific advice on which of the many possible options to choose 
1 Like