summaryrefslogtreecommitdiff
path: root/src/mutex.rs
diff options
context:
space:
mode:
authorBotahamec <botahamec@outlook.com>2024-05-23 20:44:02 -0400
committerBotahamec <botahamec@outlook.com>2024-05-23 20:44:02 -0400
commitfd4ee65a78ecbf376d99377a367137b0b8cdad41 (patch)
tree663b211b0da02431b2d100a270d60d48eebbefb0 /src/mutex.rs
parent0926201a52f860b1f75dda2e9bd6d2e536cc5f68 (diff)
parent8ecf29cfe2a74d02b2c4bcb7f7ad1a811dc38dfe (diff)
Merge branch '0.2'
Diffstat (limited to 'src/mutex.rs')
-rw-r--r--src/mutex.rs29
1 files changed, 4 insertions, 25 deletions
diff --git a/src/mutex.rs b/src/mutex.rs
index cef338e..b30c2b1 100644
--- a/src/mutex.rs
+++ b/src/mutex.rs
@@ -49,32 +49,11 @@ pub struct MutexRef<'a, T: ?Sized + 'a, R: RawMutex>(
///
/// [`lock`]: `Mutex::lock`
/// [`try_lock`]: `Mutex::try_lock`
+
+// This is the most lifetime-intensive thing I've ever written. Can I graduate
+// from borrow checker university now?
pub struct MutexGuard<'a, 'key: 'a, T: ?Sized + 'a, Key: Keyable + 'key, R: RawMutex> {
- mutex: MutexRef<'a, T, R>,
+ mutex: MutexRef<'a, T, R>, // this way we don't need to re-implement Drop
thread_key: Key,
_phantom: PhantomData<&'key ()>,
}
-
-struct MutexLockFuture<'a, T: ?Sized + 'a, R: RawMutex> {
- mutex: &'a Mutex<T, R>,
- key: Option<crate::ThreadKey>,
-}
-
-impl<'a, T: ?Sized + 'a, R: RawMutex> std::future::Future for MutexLockFuture<'a, T, R> {
- type Output = MutexGuard<'a, 'a, T, crate::ThreadKey, R>;
-
- fn poll(
- mut self: std::pin::Pin<&mut Self>,
- cx: &mut std::task::Context<'_>,
- ) -> std::task::Poll<Self::Output> {
- match unsafe { self.mutex.try_lock_no_key() } {
- Some(guard) => std::task::Poll::Ready(unsafe {
- MutexGuard::new(guard.0, self.key.take().unwrap())
- }),
- None => {
- cx.waker().wake_by_ref();
- std::task::Poll::Pending
- }
- }
- }
-}