Auto merge of #44936 - Mark-Simulacrum:rollup, r=Mark-Simulacrum
Rollup of 15 pull requests - Successful merges: #44124, #44287, #44320, #44694, #44708, #44794, #44797, #44824, #44836, #44840, #44845, #44854, #44889, #44900, #44903 - Failed merges:
This commit is contained in:
commit
c4cca3a72d
47 changed files with 463 additions and 323 deletions
|
|
@ -691,6 +691,17 @@ impl<K, V, S> HashMap<K, V, S>
|
|||
/// Returns a reference to the map's [`BuildHasher`].
|
||||
///
|
||||
/// [`BuildHasher`]: ../../std/hash/trait.BuildHasher.html
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::collections::HashMap;
|
||||
/// use std::collections::hash_map::RandomState;
|
||||
///
|
||||
/// let hasher = RandomState::new();
|
||||
/// let map: HashMap<isize, isize> = HashMap::with_hasher(hasher);
|
||||
/// let hasher: &RandomState = map.hasher();
|
||||
/// ```
|
||||
#[stable(feature = "hashmap_public_hasher", since = "1.9.0")]
|
||||
pub fn hasher(&self) -> &S {
|
||||
&self.hash_builder
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ impl TcpStream {
|
|||
/// connection request.
|
||||
///
|
||||
/// [`SocketAddr`]: ../../std/net/enum.SocketAddr.html
|
||||
#[stable(feature = "tcpstream_connect_timeout", since = "1.22.0")]
|
||||
#[stable(feature = "tcpstream_connect_timeout", since = "1.21.0")]
|
||||
pub fn connect_timeout(addr: &SocketAddr, timeout: Duration) -> io::Result<TcpStream> {
|
||||
net_imp::TcpStream::connect_timeout(addr, timeout).map(TcpStream)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,6 +65,31 @@ pub struct Guard {
|
|||
/// each lock, but once a lock is poisoned then all future acquisitions will
|
||||
/// return this error.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::sync::{Arc, Mutex};
|
||||
/// use std::thread;
|
||||
///
|
||||
/// let mutex = Arc::new(Mutex::new(1));
|
||||
///
|
||||
/// // poison the mutex
|
||||
/// 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);
|
||||
/// }
|
||||
/// };
|
||||
/// ```
|
||||
///
|
||||
/// [`Mutex`]: ../../std/sync/struct.Mutex.html
|
||||
/// [`RwLock`]: ../../std/sync/struct.RwLock.html
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
|
@ -72,10 +97,16 @@ pub struct PoisonError<T> {
|
|||
guard: T,
|
||||
}
|
||||
|
||||
/// An enumeration of possible errors which can occur while calling the
|
||||
/// [`try_lock`] method.
|
||||
/// An enumeration of possible errors associated with a [`TryLockResult`] which
|
||||
/// can occur while trying to aquire a lock, from the [`try_lock`] method on a
|
||||
/// [`Mutex`] or the [`try_read`] and [`try_write`] methods on an [`RwLock`].
|
||||
///
|
||||
/// [`Mutex`]: struct.Mutex.html
|
||||
/// [`RwLock`]: struct.RwLock.html
|
||||
/// [`TryLockResult`]: type.TryLockResult.html
|
||||
/// [`try_lock`]: struct.Mutex.html#method.try_lock
|
||||
/// [`try_read`]: struct.RwLock.html#method.try_read
|
||||
/// [`try_write`]: struct.RwLock.html#method.try_write
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub enum TryLockError<T> {
|
||||
/// The lock could not be acquired because another thread failed while holding
|
||||
|
|
@ -148,6 +179,28 @@ impl<T> PoisonError<T> {
|
|||
|
||||
/// Consumes this error indicating that a lock is poisoned, returning the
|
||||
/// underlying guard to allow access regardless.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::collections::HashSet;
|
||||
/// use std::sync::{Arc, Mutex};
|
||||
/// use std::thread;
|
||||
///
|
||||
/// let mutex = Arc::new(Mutex::new(HashSet::new()));
|
||||
///
|
||||
/// // poison the mutex
|
||||
/// 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());
|
||||
/// ```
|
||||
#[stable(feature = "sync_poison", since = "1.2.0")]
|
||||
pub fn into_inner(self) -> T { self.guard }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue