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