diff options
| author | nwin <nwin@users.noreply.github.com> | 2015-02-20 13:09:29 +0100 |
|---|---|---|
| committer | nwin <nwin@users.noreply.github.com> | 2015-02-26 10:18:13 +0100 |
| commit | 36ba96ea3cfef575ddc5eea7754a1b70b50e2080 (patch) | |
| tree | afab6aecaf1a531545cdeab04c88ae52d717c9d5 /src/libstd | |
| parent | 522d09dfecbeca1595f25ac58c6d0178bbd21d7d (diff) | |
| download | rust-36ba96ea3cfef575ddc5eea7754a1b70b50e2080.tar.gz rust-36ba96ea3cfef575ddc5eea7754a1b70b50e2080.zip | |
Implement `Debug` for `RwLock`, `arc::Weak` and `Mutex`
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/sync/mutex.rs | 14 | ||||
| -rw-r--r-- | src/libstd/sync/rwlock.rs | 14 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/libstd/sync/mutex.rs b/src/libstd/sync/mutex.rs index e77c4d2e5eb..e875bab5d91 100644 --- a/src/libstd/sync/mutex.rs +++ b/src/libstd/sync/mutex.rs @@ -15,6 +15,7 @@ use marker; use ops::{Deref, DerefMut}; use sync::poison::{self, TryLockError, TryLockResult, LockResult}; use sys_common::mutex as sys; +use fmt; /// A mutual exclusion primitive useful for protecting shared data /// @@ -252,6 +253,19 @@ impl<T: Send + 'static> Drop for Mutex<T> { } } +#[stable(feature = "rust1", since = "1.0.0")] +impl<T: fmt::Debug + Send + 'static> fmt::Debug for Mutex<T> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self.try_lock() { + Ok(guard) => write!(f, "Mutex {{ data: {:?} }}", *guard), + Err(TryLockError::Poisoned(err)) => { + write!(f, "Mutex {{ data: Poisoned({:?}) }}", **err.get_ref()) + }, + Err(TryLockError::WouldBlock) => write!(f, "Mutex {{ <locked> }}") + } + } +} + struct Dummy(UnsafeCell<()>); unsafe impl Sync for Dummy {} static DUMMY: Dummy = Dummy(UnsafeCell { value: () }); diff --git a/src/libstd/sync/rwlock.rs b/src/libstd/sync/rwlock.rs index cd833b17867..672ea1b1f62 100644 --- a/src/libstd/sync/rwlock.rs +++ b/src/libstd/sync/rwlock.rs @@ -15,6 +15,7 @@ use marker; use ops::{Deref, DerefMut}; use sync::poison::{self, LockResult, TryLockError, TryLockResult}; use sys_common::rwlock as sys; +use fmt; /// A reader-writer lock /// @@ -258,6 +259,19 @@ impl<T> Drop for RwLock<T> { } } +#[stable(feature = "rust1", since = "1.0.0")] +impl<T: fmt::Debug + Send + Sync> fmt::Debug for RwLock<T> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self.try_read() { + Ok(guard) => write!(f, "RwLock {{ data: {:?} }}", *guard), + Err(TryLockError::Poisoned(err)) => { + write!(f, "RwLock {{ data: Poisoned({:?}) }}", **err.get_ref()) + }, + Err(TryLockError::WouldBlock) => write!(f, "RwLock {{ <locked> }}") + } + } +} + struct Dummy(UnsafeCell<()>); unsafe impl Sync for Dummy {} static DUMMY: Dummy = Dummy(UnsafeCell { value: () }); |
