Yeah, my playground link was something like that.
Actually, here's a much simpler example.
struct Something { mutex: Mutex<String> }
impl Something {
fn one(&mut self) -> &str {
self.mutex.get_mut().unwrap()
}
fn two(&self) {
*self.mutex.lock().unwrap() = "Surprise!".to_owned();
}
}
No unsafe code, fixed or invariant lifetimes, or structure returns, just (&mut self) -> &T
, but calling two
with the borrow from one
still active would be Bad.