]> git.lizzy.rs Git - rust.git/blobdiff - src/libstd/sync/mutex.rs
Auto merge of #22573 - nwin:impl-debug-rwlock-weak, r=Manishearth
[rust.git] / src / libstd / sync / mutex.rs
index b9785f204406a076ae7248b9cb6e61a0fb0d4ba7..4c3b5d98a3cb172e13673201c2296d49b27f1c54 100644 (file)
@@ -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
 ///
@@ -250,6 +251,19 @@ fn drop(&mut self) {
     }
 }
 
+#[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: () });