summaryrefslogtreecommitdiffstats
path: root/tokio/src/loom/std/mutex.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tokio/src/loom/std/mutex.rs')
-rw-r--r--tokio/src/loom/std/mutex.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/tokio/src/loom/std/mutex.rs b/tokio/src/loom/std/mutex.rs
new file mode 100644
index 00000000..bf14d624
--- /dev/null
+++ b/tokio/src/loom/std/mutex.rs
@@ -0,0 +1,31 @@
+use std::sync::{self, MutexGuard, TryLockError};
+
+/// Adapter for `std::Mutex` that removes the poisoning aspects
+// from its api
+#[derive(Debug)]
+pub(crate) struct Mutex<T: ?Sized>(sync::Mutex<T>);
+
+#[allow(dead_code)]
+impl<T> Mutex<T> {
+ #[inline]
+ pub(crate) fn new(t: T) -> Mutex<T> {
+ Mutex(sync::Mutex::new(t))
+ }
+
+ #[inline]
+ pub(crate) fn lock(&self) -> MutexGuard<'_, T> {
+ match self.0.lock() {
+ Ok(guard) => guard,
+ Err(p_err) => p_err.into_inner(),
+ }
+ }
+
+ #[inline]
+ pub(crate) fn try_lock(&self) -> Option<MutexGuard<'_, T>> {
+ match self.0.try_lock() {
+ Ok(guard) => Some(guard),
+ Err(TryLockError::Poisoned(p_err)) => Some(p_err.into_inner()),
+ Err(TryLockError::WouldBlock) => None,
+ }
+ }
+}