pub struct PoisonError<T> { /* fields omitted */ }
A type of error which can be returned whenever a lock is acquired.
Both Mutex
es and RwLock
s are poisoned whenever a thread fails while the lock
is held. The precise semantics for when a lock is poisoned is documented on
each lock, but once a lock is poisoned then all future acquisitions will
return this error.
use std::sync::{Arc, Mutex};
use std::thread;
let mutex = Arc::new(Mutex::new(1));
let c_mutex = mutex.clone();
let _ = thread::spawn(move || {
let mut data = c_mutex.lock().unwrap();
*data = 2;
panic!();
}).join();
match mutex.lock() {
Ok(_) => unreachable!(),
Err(p_err) => {
let data = p_err.get_ref();
println!("recovered: {}", data);
}
};
Consumes this error indicating that a lock is poisoned, returning the
underlying guard to allow access regardless.
use std::collections::HashSet;
use std::sync::{Arc, Mutex};
use std::thread;
let mutex = Arc::new(Mutex::new(HashSet::new()));
let c_mutex = mutex.clone();
let _ = thread::spawn(move || {
let mut data = c_mutex.lock().unwrap();
data.insert(10);
panic!();
}).join();
let p_err = mutex.lock().unwrap_err();
let data = p_err.into_inner();
println!("recovered {} items", data.len());
Reaches into this error indicating that a lock is poisoned, returning a
reference to the underlying guard to allow access regardless.
Reaches into this error indicating that a lock is poisoned, returning a
mutable reference to the underlying guard to allow access regardless.
Deprecated since 1.33.0:
replaced by Error::source, which can support downcasting
The lower-level cause of this error, if any. Read more
The lower-level source of this error, if any. Read more
Formats the value using the given formatter. Read more
Formats the value using the given formatter. Read more
Converts the given value to a String
. Read more
type Error = !
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Immutably borrows from an owned value. Read more
🔬 This is a nightly-only experimental API. (get_type_id
)
this method will likely be replaced by an associated static
type Error = <U as TryFrom<T>>::Error
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Mutably borrows from an owned value. Read more