From ac4c95972e0a32eb9ff612ab8588afd9c398c928 Mon Sep 17 00:00:00 2001 From: Martin Grigorov Date: Tue, 9 Sep 2025 10:39:01 +0300 Subject: [PATCH] sync: fix implementation of unused `RwLock::try_*` methods (#7587) bd4ccae184b0359cb88f9ebc2ba157867e1eee0e introduced a wrapper for the RwLock to get rid of poisoning aspects. By mistake (?!) its try_read/write methods actually delegate to read/write() and this would lead to blocking Signed-off-by: Martin Tzvetanov Grigorov --- tokio/src/loom/std/parking_lot.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tokio/src/loom/std/parking_lot.rs b/tokio/src/loom/std/parking_lot.rs index 6a8375b07..9367ae015 100644 --- a/tokio/src/loom/std/parking_lot.rs +++ b/tokio/src/loom/std/parking_lot.rs @@ -6,7 +6,7 @@ use std::fmt; use std::marker::PhantomData; use std::ops::{Deref, DerefMut}; -use std::sync::LockResult; +use std::sync::{LockResult, TryLockError}; use std::time::Duration; // All types in this file are marked with PhantomData to ensure that @@ -101,7 +101,9 @@ impl RwLock { } pub(crate) fn try_read(&self) -> Option> { - Some(RwLockReadGuard(PhantomData, self.1.read())) + self.1 + .try_read() + .map(|guard| RwLockReadGuard(PhantomData, guard)) } pub(crate) fn write(&self) -> RwLockWriteGuard<'_, T> { @@ -109,7 +111,9 @@ impl RwLock { } pub(crate) fn try_write(&self) -> Option> { - Some(RwLockWriteGuard(PhantomData, self.1.write())) + self.1 + .try_write() + .map(|guard| RwLockWriteGuard(PhantomData, guard)) } }