From 36ba96ea3cfef575ddc5eea7754a1b70b50e2080 Mon Sep 17 00:00:00 2001 From: nwin Date: Fri, 20 Feb 2015 13:09:29 +0100 Subject: [PATCH] Implement `Debug` for `RwLock`, `arc::Weak` and `Mutex` --- src/liballoc/arc.rs | 7 +++++++ src/libstd/sync/mutex.rs | 14 ++++++++++++++ src/libstd/sync/rwlock.rs | 14 ++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/src/liballoc/arc.rs b/src/liballoc/arc.rs index 934e6ab2159..8cd27125646 100644 --- a/src/liballoc/arc.rs +++ b/src/liballoc/arc.rs @@ -139,6 +139,13 @@ pub struct Weak { unsafe impl Send for Weak { } unsafe impl Sync for Weak { } +#[stable(feature = "rust1", since = "1.0.0")] +impl fmt::Debug for Weak { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "(Weak)") + } +} + struct ArcInner { strong: atomic::AtomicUsize, weak: atomic::AtomicUsize, 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 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 @@ fn drop(&mut self) { } } +#[stable(feature = "rust1", since = "1.0.0")] +impl fmt::Debug for Mutex { + 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 {{ }}") + } + } +} + 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 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 @@ fn drop(&mut self) { } } +#[stable(feature = "rust1", since = "1.0.0")] +impl fmt::Debug for RwLock { + 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 {{ }}") + } + } +} + struct Dummy(UnsafeCell<()>); unsafe impl Sync for Dummy {} static DUMMY: Dummy = Dummy(UnsafeCell { value: () });